home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / rbbs_pc / rbbsbas.zip / CONFIG.BAS < prev    next >
BASIC Source File  |  1988-10-02  |  154KB  |  4,144 lines

  1.       ' $linesize: 132
  2.       ' $title:  'CONFIG CPC17-1A, Copyright 1983-88 by D. Thomas Mack'
  3.       ' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
  4. 10000 ' CONFIG.BAS (RBBS-PC VERSION CPC17-1A)
  5.       ' by D.Thomas Mack
  6.       '   The Second Ring
  7.       '   39 Cranbury Dr.
  8.       '   Trumbull, CT. 06611
  9.       '
  10.       ' *******************************NOTICE**********************************
  11.       ' *  A limited license is granted to all users of this program and it's *
  12.       ' *  companion program, RBBS-PC (ver. CPC17-1A), to make copies of this *
  13.       ' *  program and distribute the copies to other users, on the following *
  14.       ' *  conditions                                                         *
  15.       ' *   1.   The copyright notices contained within this program are not  *
  16.       ' *        altered, bypassed, or removed.                               *
  17.       ' *   2.   The program is not to be disrtibuted to others in modified   *
  18.       ' *        form (i.e. the line numbers must remain the same).           *
  19.       ' *   3.   No fee is charged (or any other consideration received)      *
  20.       ' *        for coping or distributing these programs without an express *
  21.       ' *        written agreement with D. Thomas Mack, The Second Ring,      *
  22.       ' *        39 Cranbury Dr., Trumbul, CT. 06611                          *
  23.       ' *                                                                     *
  24.       ' *      Copyright (c) 1983-1988 D. Thomas Mack, The Second Ring        *
  25.       ' ***********************************************************************
  26. '     $INCLUDE: 'CNFG-VAR.BAS'
  27.       CLEAR
  28. '
  29. ' *****************************************************************************
  30. ' *  DISPLAY THE CONFIG TITLE PAGE                                            *
  31. ' *****************************************************************************
  32. '
  33.       WIDTH 80
  34.       CLS
  35.       NOT.YET.IN$ = "[Not Implemented]"  ' Msg used in config for parm not yet implemented
  36.       NONE.PICKED$ = "<none>"    ' Standardized message
  37.       NUM.FILES = 8
  38.       NUM.GLOBAL = 4
  39.       NUM.MAIN = 18
  40.       NUM.SYSOP = 7
  41.       NUM.UTILITY = 12
  42.       NUM.LIBRARY = 7
  43.       VERSION.NUMBER$ = "17.1A"
  44.       I! = FRE(C$)
  45.       KEY OFF
  46.       CALL CNFGINIT
  47.       PRINT TAB(60)"tm"
  48.       PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
  49.       PRINT
  50.       PRINT TAB(17)"Capital PC User Group User-Supported Software"
  51.       PRINT
  52.       PRINT TAB(5) CHR$(214)STRING$(67,196)CHR$(183)
  53.       A$ ="    If you are using RBBS-PC " + CONFIG.VERSION$ + " and find"
  54.       PRINT TAB(5) CHR$(186);A$;SPACE$(67-LEN(A$));CHR$(186)
  55.       FOR I = 1 TO 11
  56.         READ A$
  57.         PRINT TAB(5) CHR$(186);A$;SPACE$(67-LEN(A$));CHR$(186)
  58.       NEXT
  59.       PRINT TAB(5) CHR$(211)STRING$(67,196)CHR$(189)
  60.       PRINT "Copyright (c) 1983-1988 D. Thomas Mack, 39 Cranbury Dr., Trumbull, CT. 06611"
  61.       DATA "    it valuable, I suggest you consider a contribution to
  62.       DATA "
  63.       DATA "                 Capital PC Software Exchange
  64.       DATA "                     Post Office Box 6128
  65.       DATA "                Silver Spring, Maryland  20906
  66.       DATA ""
  67.       DATA "    You are free to copy and share RBBS-PC with others on
  68.       DATA "    these three conditions:
  69.       DATA "      1.  This program is not distributed in modified form.
  70.       DATA "      2.  No fee or consideration is charged for RBBS-PC itself.
  71. 10230 DATA "      3.  This notice is not bypassed or removed.
  72. '
  73. ' *  DEFINE THE FUNCTIONS USED BY CONFIG
  74. '
  75.       DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2)) * 60 * 60) _
  76.                          + (VAL(MID$(TIME$,4,2)) * 60) _
  77.                          + (VAL(MID$(TIME$,7,2)) * 1)))
  78.       DEF FNHSH(X$) = ((ASC(X$) * 100  _
  79.                          + ASC(MID$(X$,(LEN(X$)/2) + .1,1)) * 10  _
  80.                          + ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
  81.       DEF FNHSH2(X$) = (ASC(MID$(X$,2,1)) * 10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
  82.       DELAY! = FNTI! + 5
  83. 10480 GOSUB 60440
  84. 10490 LOCATE 22,15
  85.       PRINT SPC(64)
  86.       NODE.ID$ = ""
  87.       IF COMMAND$ <> "" THEN _
  88.         CONFIG.FILENAME$ = COMMAND$: _
  89.         GOTO 10530
  90.       CONFIG.FILENAME$ = "RBBS-PC.DEF"
  91.       CALL GETNUMYN ("Will you be running multiple copies of RBBS-PC",AB)
  92.       IF NOT AB THEN _
  93.          GOTO 10530
  94. 10510 GOSUB 22480
  95. '
  96. ' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS
  97. '
  98. 10530 ON ERROR GOTO 60010
  99.       FILE$ = CONFIG.FILENAME$
  100.       GOSUB 30000
  101.       M$ = "Z"
  102.       NO.DEF.FILE = FALSE
  103.       SUBBOARD = FALSE
  104.       IF OKAY THEN _
  105.          CALL CNFGINIT : _
  106.          GOTO 10536
  107.       IF LEN(CONFIG.FILENAME$) > 7 OR _
  108.          INSTR(CONFIG.FILENAME$,".") <> 0 THEN _
  109.          GOTO 10531
  110.       FILE$ = FILE$ + "C.DEF"
  111.       GOSUB 30000
  112.       IF OKAY THEN _
  113.          CALL CNFGINIT : _
  114.          CONFIG.FILENAME$ = FILE$ : _
  115.          GOTO 10536
  116.       CALL GETNUMYN ("Are you setting up a 'sub-board'",AB)
  117.       IF NOT AB THEN _
  118.          GOTO 10531
  119.       SUBBOARD = TRUE
  120.       BASE.NAME$ = CONFIG.FILENAME$
  121.       CONFIG.FILENAME$   = CONFIG.FILENAME$+"C.DEF"
  122. 10531 A$ = "Configuration file " + CONFIG.FILENAME$ + " not found.  Create new one"
  123.       CALL GETNUMYN (A$,AB)
  124.       IF NOT AB THEN _
  125.          SYSTEM
  126. 10532 CALL ASKRO ("Default drive on which RBBS-PC is to reside (A-" + M$ +"): ",24,HJ$)
  127.       CALL ALLCAPS(HJ$)
  128.       IF LEN(HJ$) <> 1 OR HJ$ < "A" OR HJ$ > M$ THEN _
  129.          GOTO 10532
  130.       DD$ = HJ$
  131.       CALL CNFGINIT
  132.       GOSUB 15790
  133.       BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  134.                        BULLETIN.MENU$
  135.       BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  136.                          BULLETIN.PREFIX$
  137.       NO.DEF.FILE = TRUE
  138.       GOTO 11710
  139. 10536 OPEN "I",#1,CONFIG.FILENAME$
  140. '
  141. ' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE
  142. '
  143. 11600 INPUT #1,CONFIG.FILE.VER$, _
  144.                DOWNLOAD.DRIVES$, _
  145.                SYSOP.PASSWORD.1$, _
  146.                SYSOP.PASSWORD.2$, _
  147.                SYSOP.FIRST.NAME$, _
  148.                SYSOP.LAST.NAME$, _
  149.                REQUIRED.RINGS, _
  150.                START.OFFICE.HOURS, _
  151.                END.OFFICE.HOURS, _
  152.                MINUTES.PER.SESSION!, _
  153.                MAX.ALLOWED.MSGS.FRM.DEF, _
  154.                ACT.MNTHS.B4.DELETING, _
  155.                UPLOAD.DIRECTORY$, _
  156.                EXPERT.USER, _
  157.                ACTIVE.BULLETINS, _
  158.                PROMPT.BELL, _
  159.                PCJR, _
  160.                MENUS.CAN.PAUSE, _
  161.                MENU$(1), _
  162.                MENU$(2), _
  163.                MENU$(3), _
  164.                MENU$(4), _
  165.                MENU$(5), _
  166.                MENU$(6), _
  167.                CONFERENCE.MENU$, _
  168.                CONFERENCE.VIEWER.SEC.LVL, _
  169.                WELCOME.INTERRUPTABLE, _
  170.                REMIND.FILE.TRANSFERS, _
  171.                PAGE.LENGTH, _
  172.                MAX.MESSAGE.LINES, _
  173.                DOORS.AVAILABLE, _
  174.                MO$
  175.       IF CONFIG.FILE.VER$ <> VERSION.NUMBER$ THEN _
  176.          PRINT "Config DEF file, " + CONFIG.FILENAME$ + " not " + CONFIG.VERSION$ : _
  177.          END
  178.       GOSUB 22340
  179. 11620 INPUT #1,MAIN.MESSAGE.FILE$, _
  180.                MAIN.MESSAGE.BACKUP$, _
  181.                CALLERS.FILE$, _
  182.                COMMENTS.FILE$, _
  183.                MAIN.USER.FILE$, _
  184.                WELCOME.FILE$, _
  185.                NEWUSER.FILE$, _
  186.                DIRECTORY.EXTENTION$, _
  187.                COM.PORT$, _
  188.                BULLETINS.OPTIONAL, _
  189.                USER.INIT.COMMAND$, _
  190.                RTS$, _
  191.                DOS.VERSION, _
  192.                FG, _
  193.                BG, _
  194.                BORDER, _
  195.                RBBS.BAT$, _
  196.                RCTTY.BAT$
  197.       GOSUB 22340
  198. 11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _
  199.                FIRST.NAME.PROMPT$, _
  200.                HELP$(3), _
  201.                HELP$(4), _
  202.                HELP$(7), _
  203.                HELP$(9), _
  204.                BULLETIN.MENU$, _
  205.                BULLETIN.PREFIX$, _
  206.                DRIVE.FOR.BULLETINS$, _
  207.                MESSAGE.REMINDER, _
  208.                REQUIRE.NON.ASCII, _
  209.                ASK.EXTENDED.DESC, _
  210.                MAXIMUM.NUMBER.OF.NODES, _
  211.                NETWORK.TYPE, _
  212.                RECYCLE.TO.DOS, _
  213.                MAX.USR.FILE.SIZE.FRM.DEF, _
  214.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  215.                TRASHCAN.FILE$
  216.       DONT.ASK = TRUE
  217.       GOSUB 21895
  218.       DONT.ASK = FALSE
  219.       GOSUB 22340
  220. 11660 INPUT #1,MINIMUM.LOGON.SECURITY, _
  221.                DEFAULT.SECURITY.LEVEL, _
  222.                SYSOP.SECURITY.LEVEL, _
  223.                FILESEC.FILE$, _
  224.                SYSOP.MENU.SECURITY.LEVEL, _
  225.                CONFMAIL.LIST$, _
  226.                MAXIMUM.VIOLATIONS, _
  227.                SYSOP.FUNCTION(1), _
  228.                SYSOP.FUNCTION(2), _
  229.                SYSOP.FUNCTION(3), _
  230.                SYSOP.FUNCTION(4), _
  231.                SYSOP.FUNCTION(5), _
  232.                SYSOP.FUNCTION(6), _
  233.                SYSOP.FUNCTION(7), _
  234.                PASSWORD.FILE$, _
  235.                MAXIMUM.PASSWORD.CHANGES, _
  236.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  237.                OVERWRITE.SECURITY.LEVEL, _
  238.                DOORS.TERMINAL.TYPE, _
  239.                MAX.PER.DAY
  240.       GOSUB 22340
  241. 11680 INPUT #1,MAIN.FUNCTION(1), _
  242.                MAIN.FUNCTION(2), _
  243.                MAIN.FUNCTION(3), _
  244.                MAIN.FUNCTION(4), _
  245.                MAIN.FUNCTION(5), _
  246.                MAIN.FUNCTION(6), _
  247.                MAIN.FUNCTION(7), _
  248.                MAIN.FUNCTION(8), _
  249.                MAIN.FUNCTION(9), _
  250.                MAIN.FUNCTION(10), _
  251.                MAIN.FUNCTION(11), _
  252.                MAIN.FUNCTION(12), _
  253.                MAIN.FUNCTION(13), _
  254.                MAIN.FUNCTION(14), _
  255.                MAIN.FUNCTION(15), _
  256.                MAIN.FUNCTION(16), _
  257.                MAIN.FUNCTION(17), _
  258.                MAIN.FUNCTION(18), _
  259.                MIN.NEWCALLER.BAUD, _
  260.                WAIT.BEFORE.DISCONNECT
  261.       GOSUB 22340
  262. 11700 INPUT #1,FILES.FUNCTION(1), _
  263.                FILES.FUNCTION(2), _
  264.                FILES.FUNCTION(3), _
  265.                FILES.FUNCTION(4), _
  266.                FILES.FUNCTION(5), _
  267.                FILES.FUNCTION(6), _
  268.                FILES.FUNCTION(7), _
  269.                FILES.FUNCTION(8), _
  270.                UTILITY.FUNCTION(1), _
  271.                UTILITY.FUNCTION(2), _
  272.                UTILITY.FUNCTION(3), _
  273.                UTILITY.FUNCTION(4), _
  274.                UTILITY.FUNCTION(5), _
  275.                UTILITY.FUNCTION(6), _
  276.                UTILITY.FUNCTION(7), _
  277.                UTILITY.FUNCTION(8), _
  278.                UTILITY.FUNCTION(9), _
  279.                UTILITY.FUNCTION(10), _
  280.                UTILITY.FUNCTION(11), _
  281.                UTILITY.FUNCTION(12), _
  282.                GLOBAL.FUNCTION(1), _
  283.                GLOBAL.FUNCTION(2), _
  284.                GLOBAL.FUNCTION(3), _
  285.                GLOBAL.FUNCTION(4), _
  286.                UPLOAD.TIME.FACTOR!, _
  287.                COMPUTER.TYPE, _
  288.                REMIND.PROFILE, _
  289.                RBBS.NAME$, _
  290.                COMMANDS.BETWEEN.RINGS, _
  291.                MNP.SUPPORT, _
  292.                PAGING.PRINTER.SUPPORT$, _
  293.                MODEM.INIT.BAUD$
  294.       GOSUB 22340
  295. 11705 INPUT #1,TURN.PRINTER.OFF, _
  296.                DIRECTORY.PATH$, _
  297.                MIN.SEC.TO.VIEW, _
  298.                LIMIT.SEARCH.TO.FMS, _
  299.                DEFAULT.CATEGORY.CODE$, _
  300.                DIR.CATEGORY.FILE$, _
  301.                NEW.FILES.CHECK, _
  302.                MAX.DESC.LEN, _
  303.                SHOW.SECTION, _
  304.                COMMANDS.IN.PROMPT, _
  305.                NEWUSER.SETS.DEFAULTS, _
  306.                HELP.PATH$, _
  307.                HELP.EXTENSION$, _
  308.                MAIN.COMMANDS$, _
  309.                FILE.COMMANDS$, _
  310.                UTIL.COMMANDS$, _
  311.                GLOBAL.COMMANDS$, _
  312.                SYSOP.COMMANDS$
  313.       GOSUB 22340
  314. 11706 INPUT #1,RECYCLE.WAIT, _
  315.                LIBRARY.FUNCTION(1), _
  316.                LIBRARY.FUNCTION(2), _
  317.                LIBRARY.FUNCTION(3), _
  318.                LIBRARY.FUNCTION(4), _
  319.                LIBRARY.FUNCTION(5), _
  320.                LIBRARY.FUNCTION(6), _
  321.                LIBRARY.FUNCTION(7), _
  322.                LIBRARY.DRIVE$, _
  323.                LIBRARY.DIRECTORY.PATH$, _
  324.                LIBRARY.DIRECTORY.EXTENTION$, _
  325.                LIBRARY.WORK.DISK.PATH$, _
  326.                LIBRARY.MAX.DISK, _
  327.                LIBRARY.MAX.DIRECTORY, _
  328.                LIBRARY.MAX.SUBDIR, _
  329.                LIBRARY.SUBDIR.PREFIX$, _
  330.                LIBRARY.ARCHIVE.PATH$, _
  331.                LIBRARY.ARCHIVE.PROGRAM$, _
  332.                LIBRARY.COMMANDS$
  333.       GOSUB 22340
  334.       INPUT #1,UPLOAD.PATH$, _
  335.                FMS.DIRECTORY$, _
  336.                ANS.MENU$,_
  337.                REQUIRED.QUESTIONNAIRE$,_
  338.                REMEMBER.NEW.USERS, _
  339.                SURVIVE.NOUSER.ROOM, _
  340.                PROMPT.HASH$, _
  341.                START.HASH, _
  342.                LEN.HASH, _
  343.                PROMPT.INDIV$, _
  344.                START.INDIV, _
  345.                LEN.INDIV
  346.       GOSUB 22340
  347.       INPUT #1,BYPASS.MSGS, _
  348.                MUSIC, _
  349.                RESTRICT.BY.DATE, _
  350.                DAYS.TO.WARN, _
  351.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  352.                CALLBACK.VERIFICATION, _
  353.                RESTRICT.VALID.CMDS, _
  354.                NEW.USER.DEFAULT.MODE, _
  355.                NEW.USER.LINE.FEEDS, _
  356.                NEW.USER.NULLS, _
  357.                NEW.USER.BELL, _
  358.                NEW.USER.CASE, _
  359.                NEW.USER.MARGINS, _
  360.                WRAP.CALLERS.FILE$, _
  361.                REDIRECT.IO.METHOD, _
  362.                GO.TO.SHELL, _
  363.                HALT.ON.ERROR, _
  364.                NEW.PUBLIC.MSGS.SECURITY, _
  365.                NEW.PRIVATE.MSGS.SECURITY, _
  366.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  367.                SL.CATEGORIZE.UPLOADS, _
  368.                BAUDOT, _
  369.                TIME.TO.DROP.TO.DOS, _
  370.                EXPIRED.SECURITY, _
  371.                DTR.DROP.DELAY, _
  372.                ASK.IDENTITY, _
  373.                USE.EXTERNAL.XMODEM, _
  374.                BUFFER.SIZE, _
  375.                MLCOM, _
  376.                SHOOT.YOURSELF, _
  377.                F7.MESSAGE$, _
  378.                NEW.USER.DEFAULT.PROTOCOL$, _
  379.                NEW.USER.GRAPHICS$, _
  380.                NET.MAIL$, _
  381.                MASTER.DIRECTORY.NAME$, _
  382.                PROTO.DEF$, _
  383.                UPCAT.HELP$, _
  384.                ALWAYS.STREW.TO$, _
  385.                LAST.NAME.PROMPT$
  386.       GOSUB 22340
  387.       INPUT #1,PERSONAL.DRVPATH$, _
  388.                PERSONAL.DIR$, _
  389.                PERSONAL.BEGIN, _
  390.                PERSONAL.LEN, _
  391.                PERSONAL.PROTOCOL$, _
  392.                PERSONAL.CONCAT , _
  393.                PRIVATE.READ.SEC, _
  394.                PUBLIC.READ.SEC, _
  395.                SEC.CHANGE.MSG, _
  396.                KEEP.INIT.BAUD, _
  397.                MAIN.PUI$, _
  398.                DEFAULT.ECHOER$, _
  399.                HOST.ECHO.ON$, _
  400.                HOST.ECHO.OFF$, _
  401.                SWITCH.BACK, _
  402.                DEFAULT.LINE.ACK$, _
  403.                ALTDIR.EXTENSION$, _
  404.                DIRECTORY.PREFIX$
  405.       GOSUB 22340
  406.       INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  407.                MODEM.INIT.WAIT.TIME, _
  408.                MODEM.COMMAND.DELAY.TIME, _
  409.                TURBO.RBBS
  410.       GOSUB 22340
  411. 11707 INPUT #1,DNLD.SUB, _
  412.                WILL.SUBDIRS.B.USED, _
  413.                UPLOAD.TO.SUBDIR, _
  414.                DOWNLOAD.TO.SUBDIR, _
  415.                UPLOAD.SUBDIR$, _
  416.                MIN.OLDCALLER.BAUD, _
  417.                USE.EXTERNAL.YMODEM, _
  418.                DISKFULL.GO.OFFLINE, _
  419.                EXTENDED.LOGGING, _
  420.                USER.RESET.COMMAND$, _
  421.                USER.COUNT.RINGS.COMMAND$, _
  422.                USER.ANSWER.COMMAND$, _
  423.                USER.GO.OFFHOOK.COMMAND$, _
  424.                DISK.FOR.DOS$, _
  425.                DUMB.MODEM, _
  426.                COMMENTS.AS.MESSAGES, _
  427.                LSB, _
  428.                MSB, _
  429.                LINE.CONTROL.REGISTER, _
  430.                MODEM.CONTROL.REGISTER, _
  431.                LINE.STATUS.REGISTER, _
  432.                MODEM.STATUS.REGISTER
  433.       GOSUB 22340
  434.       INPUT #1,KEEP.TIME.CREDITS, _
  435.                XON.XOFF, _
  436.                ALLOW.CALLER.TURBO, _
  437.                USE.DEVICE.DRIVER$, _
  438.                PRELOG$, _
  439.                NEW.USER.QUESTIONNAIRE$, _
  440.                EPILOG$, _
  441.                REGISTRATION.PROGRAM$, _
  442.                QUES.PATH$, _
  443.                USER.LOCATION$, _
  444.                USER.INITIALIZE.COMMAND$, _
  445.                USER.FIRMWARE.CLEAR.CMND$, _
  446.                USER.FIRMWARE.WRITE.CMND$, _
  447.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  448.                SIZE.OF.STACK, _
  449.                SECURITY.EXEMPT.FROM.EPILOG, _
  450.                USE.BASIC.WRITES, _
  451.                DOSANSI, _
  452.                ESCAPE.INSECURE, _
  453.                USE.DIR.ORDER, _
  454.                ADD.DIR.SECURITY, _
  455.                MAX.EXTENDED.LINES, _
  456.                DF$
  457.       GOSUB 22340
  458.       INPUT #1,LOGON.MAIL.LEVEL$, _
  459.                MACRO.DRVPATH$, _
  460.                MACRO.EXTENSION$, _
  461.                EMPHASIZE.ON.DEF$, _
  462.                EMPHASIZE.OFF.DEF$, _
  463.                FG.1.DEF$, _
  464.                FG.2.DEF$, _
  465.                FG.3.DEF$, _
  466.                FG.4.DEF$, _
  467.                SECVIO.HLP$, _
  468.                FOSSIL, _
  469.                MAX.CARRIER.WAIT, _
  470.                CALLER.BKGRD, _
  471.                SMART.TEXT, _
  472.                TIME.LOCK, _
  473.                WRITE.BUF.DEF, _
  474.                DF, _
  475.                DF, _
  476.                DF, _
  477.                AUTOPAGE.DEF$
  478.       GOSUB 22340
  479.       IF MAX.CARRIER.WAIT < 1 THEN _
  480.          MAX.CARRIER.WAIT = 30
  481.       CALL ANSIDECODE (FG.1.DEF$)
  482.       CALL ANSIDECODE (FG.2.DEF$)
  483.       CALL ANSIDECODE (FG.3.DEF$)
  484.       CALL ANSIDECODE (FG.4.DEF$)
  485.       IF LEFT$(MACRO.EXTENSION$,1) = "." THEN _
  486.          MACRO.EXTENSION$ = RIGHT$(MACRO.EXTENSION$,LEN(MACRO.EXTENSION$)-1)
  487.       IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
  488.          GOTO 11710
  489.       FOR I = 1 TO DNLD.SUB
  490.          INPUT #1,DNLD$(I)
  491.       NEXT
  492.       GOSUB 22340
  493. '
  494. ' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED
  495. '
  496. 11710 IF CALLERS.FILE$ = "" THEN _
  497.          CALLERS.FILE$ = NONE.PICKED$
  498.       IF ALTDIR.EXTENSION$ = "" THEN _
  499.          ALTDIR.EXTENSION$ = NONE.PICKED$
  500.       IF ALWAYS.STREW.TO$ = "" THEN _
  501.          ALWAYS.STREW.TO$ = NONE.PICKED$
  502.       IF QUES.PATH$ = "" THEN _
  503.          QUES.PATH$ = NONE.PICKED$
  504.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  505.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  506.       IF NET.MAIL$ = "NONE" THEN _
  507.          NET.MAIL$ = NONE.PICKED$
  508.       IF CONFMAIL.LIST$ = "" THEN _
  509.          CONFMAIL.LIST$ = NONE.PICKED$
  510.       X$ = BULLETIN.MENU$
  511.       CALL BRKFNAME (X$,Z$,BULLETIN.MENU$,Y$,-1)
  512.       IF Y$ <> "" THEN _
  513.          BULLETIN.MENU$ = BULLETIN.MENU$ + Y$
  514.       X$ = BULLETIN.PREFIX$
  515.       CALL BRKFNAME (X$,Z$,BULLETIN.PREFIX$,Y$,-1)
  516.       IF RECYCLE.TO.DOS = 0 THEN _
  517.          RECYCLE.TO.DOS$ = "INTERNAL" _
  518.       ELSE RECYCLE.TO.DOS$ = "SYSTEM
  519.       HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3)) - 1)
  520.       SF = SYSOP.FUNCTION(1)
  521.       GOSUB 16062
  522.       FOR I = 2 TO NUM.SYSOP
  523.          IF SYSOP.FUNCTION(I) > SF THEN _
  524.             GOTO 11790
  525.          SF = SYSOP.FUNCTION(I)
  526. 11790 NEXT
  527.       MM = MAIN.FUNCTION(1)
  528.       FOR I = 1 TO NUM.MAIN
  529.          MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
  530.          IF MAIN.FUNCTION(I)    > MM THEN _
  531.             GOTO 11810
  532.          MM = MAIN.FUNCTION(I)
  533. 11810 NEXT
  534.       FC = FILES.FUNCTION(1)
  535.       FOR I = 1 TO NUM.FILES
  536.          FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
  537.          IF FILES.FUNCTION(I) > FC THEN _
  538.             GOTO 11830
  539.          FC = FILES.FUNCTION(I)
  540. 11830 NEXT
  541.       UE = UTILITY.FUNCTION(1)
  542.       FOR I = 1 TO NUM.UTILITY
  543.          UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
  544.          IF UTILITY.FUNCTION(I) > UE THEN _
  545.             GOTO 11850
  546.          UE = UTILITY.FUNCTION(I)
  547. 11850 NEXT
  548.       PS = LIBRARY.FUNCTION(1)
  549.       FOR I = 1 TO NUM.LIBRARY
  550.          LIBRARY.FUNCTION$(I,2) = MID$(LIBRARY.COMMANDS$,I,1)
  551.          IF LIBRARY.FUNCTION(I) > PS THEN _
  552.            GOTO 11860
  553.          PS = LIBRARY.FUNCTION(I)
  554. 11860 NEXT
  555.       FOR I = 1 TO NUM.GLOBAL
  556.          GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
  557.       NEXT
  558.       CLOSE #1
  559.       GOSUB 50480
  560.       GOSUB 50530
  561. 11870 IF EXPERT.USER = 0 THEN _
  562.          EXPERT.USER$ = "NOVICE
  563.       IF EXPERT.USER = -1 THEN _
  564.          EXPERT.USER$ = "EXPERT
  565.       DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
  566.       DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$) - 1))
  567.       PROMPT.BELL$ = "ON"
  568.       IF PROMPT.BELL = 0 THEN _
  569.          PROMPT.BELL$ = "OFF
  570.       GOSUB 15780
  571.       IF SYSOP.PASSWORD.1$ = "" OR SYSOP.PASSWORD.2$ = "" THEN _
  572.          MN1$ = "<Disabled>" : _
  573.          MN2$ = "" _
  574.       ELSE MN1$ = SYSOP.PASSWORD.1$ : _
  575.            MN2$ = SYSOP.PASSWORD.2$
  576.       M11$ = "NO"
  577.       IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
  578.          M11$ = "YES"
  579.       IF START.HASH < 1 THEN _
  580.          START.HASH = 1
  581.       IF LEN.HASH < 2 THEN _
  582.          LEN.HASH = 31
  583.       GO.TO.SHELL$ = "SHELL"
  584.       IF NOT GO.TO.SHELL THEN _
  585.          GO.TO.SHELL$ = "EXIT RBBS-PC"
  586.       IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
  587.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$
  588.       GOSUB 18002
  589.       GOSUB 18102
  590.       I = 1
  591.       GOSUB 13030
  592.       IF NO.DEF.FILE = FALSE THEN _
  593.          GOTO 12151
  594.       IF NOT SUBBOARD THEN _
  595.          GOTO 12151
  596.       MAIN.MESSAGE.FILE$ = BASE.NAME$+"M.DEF"
  597.       MAIN.USER.FILE$    = BASE.NAME$+"U.DEF"
  598. 12151 CONFERENCE.MODE = 0
  599.       SUBBOARD = FALSE
  600.       MAINMSG$ = MAIN.MESSAGE.FILE$
  601.       MAINUSR$ = MAIN.USER.FILE$
  602. 12160 KEY OFF
  603. '
  604. ' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT.
  605. '
  606.       FILE$ = MAIN.MESSAGE.FILE$
  607.       GOSUB 30000
  608.       NO.OLD.FILE = FALSE
  609.       IF OKAY THEN _           ' IF MESSAGE FILE EXISTS, READ CHECKPOINT RECORD
  610.          GOTO 12170
  611.       NO.OLD.FILE = TRUE
  612.       A$ = "Message file " + MAIN.MESSAGE.FILE$ + " not found.  Create new one"
  613.       CALL GETNUMYN (A$,AB)
  614.       IF NOT AB THEN _
  615.          SYSTEM
  616.       CALLS.TODATE! = 0                                 ' FIRST MSG#    -- 0
  617.       FIRST.USER.RECORD = 1                             ' USERS file    -- first record number
  618.       CURRENT.USER.COUNT = FIRST.USER.RECORD            ' USERS file    -- next available record number
  619.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF   ' USERS file    -- last record number
  620.       FIRST.MESSAGE.RECORD = 2+MAXIMUM.NUMBER.OF.NODES  ' MESSAGES file -- first record of messages
  621.       NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD        ' MESSAGES file -- next available record number
  622.       HIGHEST.MESSAGE.RECORD = 5 * MAX.ALLOWED.MSGS.FRM.DEF _
  623.                                + 1 _
  624.                                + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
  625.       MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF  ' MESSAGES file -- maximum number of messages
  626.       B1 = MAXIMUM.NUMBER.OF.NODES
  627.       B3! = HIGHEST.MESSAGE.RECORD
  628.       GOSUB 22080
  629.       GOSUB 30450                        ' UPDATE CHECKPOINT RECORD
  630. 12170 GOSUB 30040                        ' READ THE CHECKPOINT RECORD
  631.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  632.       MAX.ALLOWED.MSGS.FRM.DEF  = INT((HIGHEST.MESSAGE.RECORD - FIRST.MESSAGE.RECORD) / 5) + 1
  633.       IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
  634.          MAX.ALLOWED.MSGS.FRM.DEF = 999
  635.       IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
  636.          MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
  637.          GOSUB 30450                     ' READ THE CHECKPOINT RECORD
  638.       FILE$ = MAIN.USER.FILE$            ' Check for USERS file
  639.       GOSUB 30000
  640.       NO.OLD.FILE = FALSE
  641.       IF OKAY THEN _
  642.          GOSUB 50500 : _
  643.          GOTO 12189
  644.       NO.OLD.FILE = TRUE
  645.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  646.       A$ = MAIN.USER.FILE$
  647.       GOSUB 22140
  648.       GOSUB 22150
  649. 12189 FOR I = 1 TO 10
  650.          KEY I,""
  651.       NEXT
  652.       NO.OLD.FILE = FALSE
  653.       B1 = MAX.USR.FILE.SIZE.FRM.DEF
  654.       GOSUB 22140
  655.       IF NO.DEF.FILE = FALSE THEN  _
  656.          GOTO 12190
  657.       GOSUB 18700
  658.       NO.DEF.FILE = FALSE
  659. '
  660. ' *  DISPLY CONFIG'S MAIN FUNCTION KEY MENU
  661. '
  662. 12190 IF KSTACKED$ = "" THEN _
  663.          IX = 0
  664. 12320 CALL DISPLAY
  665.       IF IX = 21 THEN _
  666.          GOTO 22350
  667.       ON IPAGE GOTO 12622, _  ' 1        F1 - Global Parameters (part 1)
  668.                     12624, _  ' 2        F2 - Global Parameters (part 2)
  669.                     12626, _  ' 3        F3 - Global Parameters (part 3)
  670.                     12628, _  ' 4        F4 - RBBS-PC System Files (part 1)
  671.                     12630, _  ' 5        F5 - RBBS-PC System Files (part 2)
  672.                     12632, _  ' 6        F6 - RBBS-PC "doors"
  673.                     12634, _  ' 7        F7 - RBBS-PC security (part 1)
  674.                     12636, _  ' 8        F8 - RBBS-PC security (part 2)
  675.                     12640, _  ' 9        F9 - Multiple RBBS-PC parameters
  676.                     12641, _  '10       F10 - RBBS-PC's Utilities
  677.                     12642, _  '11  Shift-F1 - RBBS-PC File Manager
  678.                     12643, _  '12  Shift-F2 - RBBS-PC comm. parameters (part 1)
  679.                     12644, _  '13  Shift-F3 - RBBS-PC comm. parameters (part 2)
  680.                     12645, _  '14  Shift-F4 - RBBS-PC Net Mail
  681.                     12646, _  '15  Shift-F5 - New user's parameters
  682.                     12647, _  '16  Shift-F6 - Library parameters
  683.                     12648  _  '17  Shift-F7 - RBBS-PC Color parameters
  684. '
  685. ' *  HANDLE UNSUPPORTED REQUEST
  686. '
  687. 12325 IX = IPAGE
  688.       GOTO 12320
  689. 12622 ON ILOOKUP GOSUB 12840, _  '   1 SYSOP's first name
  690.                        12910, _  '   2 SYSOP's last name
  691.                        13140, _  '   3 SYSOP's default signon mode
  692.                        13210, _  '   4 SYSOP's office hours
  693.                        13224, _  '   5 Page SYSOP with printer's bell
  694.                        13249, _  '   6 Go off-line when disk is full
  695.                        13750, _  '   7 Prompt bell
  696.                        13840, _  '   8 Maximum minutes per session
  697.                        16650, _  '   9 Maximum minutes per day
  698.                        15234, _  '  10 Factor to extend time for uploads
  699.                        13940, _  '  11 Months of inactivity before deleted
  700.                        13131, _  '  12 Name of this RBBS-PC
  701.                        15530, _  '  13 Foreground color
  702.                        15590, _  '  14 Background color
  703.                        15650, _  '  15 Border color
  704.                        13320, _  '  16 ANSI.SYS in CONFIG.SYS?
  705.                        13330, _  '  17 Control code for Smart Text
  706.                        17725, _  '  18 AutoPage def file
  707.                        13000, _  '  19 Level of logon mail report
  708.                        12325     '  20
  709.       GOTO 12325
  710. 12624 ON ILOOKUP GOSUB 15800, _  '  21 Remind users of messages they left
  711.                        16690, _  '  22 Remind users of uploads and downloads
  712.                        16722, _  '  23 Remind users of their profile
  713.                        17600, _  '  24 Enable download of new files at logon
  714.                        16730, _  '  25 Specify default page length
  715.                        16790, _  '  26 Set maximum number of lines/message
  716.                        16000, _  '  27 Is system "welcome" interruptable?
  717.                        15840, _  '  28 Are the system bulletins optional?
  718.                        16040, _  '  29 Type of PC running RBBS-PC
  719.                        17230, _  '  30 Symbols for SYSOP's commands
  720.                        17240, _  '  31 Symbols for main menu's commands
  721.                        17250, _  '  32 Symbols for file menu's commands
  722.                        17260, _  '  33 Symbols for utilities menu's commands
  723.                        17264, _  '  34 Symbols for "global" commands
  724.                        17500, _  '  35 Show section at command prompt?
  725.                        17550, _  '  36 Show commands at command prompt?
  726.                        15830, _  '  37 Restrict valid cmnds to current section
  727.                        15820, _  '  38 Use machine language subroutines?
  728.                        15825, _  '  39 Use BASIC PRINT for screen writes?
  729.                        16795     '  40 Set max # of lines for extended desc
  730.       GOTO 12325
  731. 12626 ON ILOOKUP GOSUB 18000, _  '  41 Field used to locate a users record
  732.                        18100, _  '  42 Field to distinguish users with same id
  733.                        17800, _  '  43 Where personal id begins in user rec
  734.                        17810, _  '  44 Length of personal id in user rec
  735.                        17830, _  '  45 First Name prompt
  736.                        17840, _  '  46 Last Name prompt
  737.                        17850, _  '  47 Enforce upload/download ratios
  738.                        17630, _  '  48 Restrict users by date
  739.                        18510, _  '  49 Security level when subscription expires
  740.                        18530, _  '  50 Days before expiration to warn user
  741.                        18520, _  '  51 Days a newuser gets when registers
  742.                        17610, _  '  52 Turn printer off on recycle
  743.                        17620, _  '  53 Play music for RBBS themes?
  744.                        21760, _  '  54 Buffer size for text files
  745.                        16032, _  '  55 Size of stack space to use
  746.                        22550, _  '  56 Notify users when SYSOP wants system?
  747.                        17845, _  '  57 Ask users their (city/state)
  748.                        17625, _  '  58 Order show dirs for ALL option
  749.                        21770, _  '  59 Buffer size on writes
  750.                        12325     '  60
  751.       GOTO 12325
  752. 12628 ON ILOOKUP GOSUB 14790, _  '  61 Drive and file describing bulletins
  753.                        15290, _  '  62 Number of active bulletins
  754.                        14800, _  '  63 Prefix used to name bulletin files
  755.                        14810, _  '  64 Drive and path for 'help' files
  756.                        14820, _  '  65 Prefix of nine major help files
  757.                        14825, _  '  66 Extension for individual help files
  758.                        14915, _  '  67 Help file for categorizing uploads
  759.                        14830, _  '  68 Name of 'newuser' file
  760.                        14840, _  '  69 Name of 'welcome" file
  761.                        14860, _  '  70 Name of SYSOP's commands menu
  762.                        14870, _  '  71 Name of main message command menu
  763.                        14880, _  '  72 Name of file subsystem command menu
  764.                        14890, _  '  73 Name of utilities command menu
  765.                        14900, _  '  74 Menu listing available conferences
  766.                        14905, _  '  75 Menu of questionnaires
  767.                        14815, _  '  76 Drive/path for optional questionnaires
  768.                        18310, _  '  77 Name of main PUI
  769.                        15835, _  '  78 Can menus pause in the middle?
  770.                        15850, _  '  79 Macro drive/path
  771.                        15860     '  80 Macro extension
  772.       GOTO 12325
  773. 12630 ON ILOOKUP GOSUB 14910, _  '  81 File of unacceptable user names
  774.                        17700, _  '  82 Name of required questionnaire
  775.                        17710, _  '  83 Name of "prelog" file
  776.                        17720, _  '  84 Name of new user's questionnaire
  777.                        17730, _  '  85 Name of "epilog" questionnaire
  778.                        15460, _  '  86 Name of 'message' file
  779.                        15500, _  '  87 Name of 'user' file
  780.                        15464, _  '  88 Name of 'comments' file
  781.                        15993, _  '  89 Record comments as private messages?
  782.                        15461, _  '  90 Name of 'callers' file
  783.                        15991, _  '  91 Extened logging to 'callers' file?
  784.                        22550, _  '  92 Wrap-around the 'callers' file?
  785.                        12670, _  '  93 Conferences to search for new mail
  786.                        12325, _  '  94
  787.                        12325, _  '  95
  788.                        12325, _  '  96
  789.                        12325, _  '  97
  790.                        12325, _  '  98
  791.                        12325, _  '  99
  792.                        12325     ' 100
  793.       GOTO 12325
  794. 12632 ON ILOOKUP GOSUB 16290, _  ' 101 Are 'doors' available?
  795.                        16130, _  ' 102 Name of menu listing available doors
  796.                        16140, _  ' 103 Name of file built dynamically for doors
  797.                        16150, _  ' 104 Name of .BAT the will re-invoke RBBS
  798.                        16160, _  ' 105 Drive to look for COMMAND.COM on
  799.                        16170, _  ' 106 Enable CTTY command for doors
  800.                        16180, _  ' 107 Invoke "drivers" via shell or DOS exit
  801.                        18640, _  ' 108 Name of program to invoke at logon
  802.                        12325, _  ' 109
  803.                        12325, _  ' 110
  804.                        12325, _  ' 111
  805.                        12325, _  ' 112
  806.                        12325, _  ' 113
  807.                        12325, _  ' 114
  808.                        12325, _  ' 115
  809.                        12325, _  ' 116
  810.                        12325, _  ' 117
  811.                        12325, _  ' 118
  812.                        12325, _  ' 119
  813.                        12325     ' 120
  814.       GOTO 12325
  815. 12634 ON ILOOKUP GOSUB 12980, _  ' 121 Pseudonym to sign on remotely as SYSOP
  816.                        12990, _  ' 122 Escape logs on with no security
  817.                        17160, _  ' 123 Minimum security level to logon
  818.                        17170, _  ' 124 Default security level for new users
  819.                        17180, _  ' 125 SYSOP's security level
  820.                        17200, _  ' 126 Minimum security to see SYSOP's menu
  821.                        17210, _  ' 127 Min security to add extended desc
  822.                        17220, _  ' 128 Max # security violations allowed
  823.                        17230, _  ' 129 Security levels for SYSOP commands
  824.                        17240, _  ' 130 Security levels for main commands
  825.                        17250, _  ' 131 Security levels for file commands
  826.                        17260, _  ' 132 Security levels for utilities commands
  827.                        17264, _  ' 133 Security level for 'global' commands'
  828.                        17290, _  ' 134 Max # password changes allowed
  829.                        17300, _  ' 135 Min. security for temp. passwords
  830.                        17310, _  ' 136 Min. security to overwrite on uploads
  831.                        17316, _  ' 137 User's security exempted from packing
  832.                        15310, _  ' 138 Default security to read new Priv. Msg.
  833.                        15320, _  ' 139 Default security to read new Public Msg.
  834.                        15330     ' 140 Min. security to change msg.'s security
  835.       GOTO 12325
  836. 12636 ON ILOOKUP GOSUB 22550, _  ' 141 Call back verification of all/new users
  837.                        18630, _  ' 142 Drive/path for personal files
  838.                        12750, _  ' 143 Name of personal directory
  839.                        17820, _  ' 144 What protocol required for personal dnld
  840.                        17190, _  ' 145 File listing download-secured files
  841.                        17270, _  ' 146 File name with privileged passwords
  842.                        17645, _  ' 147 Concatenate ASCII files in pers. dnld?
  843.                        18515, _  ' 148 Security level to categorize uploads
  844.                        18500, _  ' 149 Min. security to view new uploads
  845.                        16033, _  ' 150 Security level exempt from "epilog"
  846.                        18545, _  ' 151 Min. security to automatically add users
  847.                        18340, _  ' 152 Min. security to use turbo logon
  848.                        18345, _  ' 153 Min. security to add dir entry
  849.                        17280, _  ' 154 Help file for security violation
  850.                        18330, _  ' 155 Time Lock Selection
  851.                        12325, _  ' 156
  852.                        12325, _  ' 157
  853.                        12325, _  ' 158
  854.                        12325, _  ' 159
  855.                        12325     ' 160
  856.       GOTO 12325
  857. 12640 ON ILOOKUP GOSUB 21750, _  ' 161 Maximum number of concurrent RBBS-PC's
  858.                        21810, _  ' 162 Environment running RBBS-PC
  859.                        21950, _  ' 163 Method that RBBS-PC re-cycles with
  860.                        21910, _  ' 164 Number of records in 'user' file
  861.                        22040, _  ' 165 Number of records in 'message' file
  862.                        13890, _  ' 166 Maximum number of messages allowed
  863.                        25040, _  ' 167 Conference file maintenance
  864.                        12325, _  ' 168
  865.                        12325, _  ' 169
  866.                        12325, _  ' 170
  867.                        12325, _  ' 171
  868.                        12325, _  ' 172
  869.                        12325, _  ' 173
  870.                        12325, _  ' 174
  871.                        12325, _  ' 175
  872.                        12325, _  ' 176
  873.                        12325, _  ' 177
  874.                        12325, _  ' 178
  875.                        12325, _  ' 179
  876.                        12325     ' 180
  877.       IF REFRESH = 1 THEN _
  878.          REFRESH = 0 : _
  879.          GOTO 12151
  880.       IF REFRESH = 2 THEN _
  881.          REFRESH = 0 : _
  882.          GOTO 12160
  883.       GOTO 12325
  884. 12641 ON ILOOKUP GOSUB 23160, _  ' 181 Pack the 'messages' file
  885.                        22570, _  ' 182 Rebuild the 'user' file
  886.                        23630, _  ' 183 Print the message headers
  887.                        23740, _  ' 184 Renumber messages
  888.                        23620, _  ' 185 Repair the 'message' file
  889.                        24050, _  ' 186 Require users to answer questionnaire
  890.                        24790, _  ' 187 Check FMS directory
  891.                        13180, _  ' 188 Check Personal Download directory
  892.                        18700, _  ' 189 Check critical parameters
  893.                        18800, _  ' 190 Set New parameters
  894.                        24795, _  ' 191 Reset active printers for all nodes
  895.                        24040, _  ' 192 Set Highlight to match graphics
  896.                        12325, _  ' 193
  897.                        12325, _  ' 194
  898.                        12325, _  ' 195
  899.                        12325, _  ' 196
  900.                        12325, _  ' 197
  901.                        12325, _  ' 198
  902.                        12325, _  ' 199
  903.                        12325     ' 200
  904.       GOTO 12325
  905. 12642 ON ILOOKUP GOSUB 14920, _  ' 201 Drive available for uploading
  906.                        12730, _  ' 202 Name of directory for uploading
  907.                        18550, _  ' 203 Drive/path for upload dir
  908.                        13470, _  ' 204 Drive(s) available for downloading
  909.                        25380, _  ' 205 Are DOS subdirectories used?
  910.                        25420, _  ' 206 Upload to a DOS subdirectory?
  911.                        25460, _  ' 207 Are downloads from DOS subdirectories?
  912.                        25495, _  ' 208 List, change, add, delete subdir.?
  913.                        14850, _  ' 209 Extension for file directories
  914.                        14855, _  ' 210 Alternate directory extension
  915.                        14857, _  ' 211 Name (prefix) of dir of dir
  916.                        15920, _  ' 212 Omit directory list from N>ew command?
  917.                        18350, _  ' 213 Copy upload descriptions to another file
  918.                        12740, _  ' 214 FMS directory name
  919.                        17590, _  ' 215 Limit file searches to upload dir
  920.                        18200, _  ' 216 Default category codes for uploads
  921.                        18300, _  ' 217 File name with valid category codes
  922.                        18360, _  ' 218 Restrict dir search for 'ALL' to
  923.                        18400, _  ' 219 Length of description of uploads
  924.                        18600     ' 220 Drive/path directory files
  925.       GOTO 12325
  926. 12643 ON ILOOKUP GOSUB 14120, _  ' 221 Communications Port being used
  927.                        15240, _  ' 222 Seconds for modem to initalize
  928.                        15250, _  ' 223 Seconds to wait before issuing cmds.
  929.                        13228, _  ' 224 Number of rings to answer on
  930.                        15710, _  ' 225 Use standard RBBS-PC modem commands
  931.                        15911, _  ' 226 Microcom's MNP available?
  932.                        16121, _  ' 227 Issue modem commands between rings?
  933.                        16124, _  ' 228 Baud rate to initially open modem at
  934.                        16031, _  ' 229 Seconds to wait before disconnecting
  935.                        16725, _  ' 230 Is a dumb modem being used?
  936.                        23731, _  ' 231 Initialize Hayes 2400 firmware
  937.                        18540, _  ' 232 DTR drop delay time
  938.                        18620, _  ' 233 Where external protocol pgms are
  939.                        17650, _  ' 234 Always check for autodownload support
  940.                        15880, _  ' 235 Require non-ASCII protocol?
  941.                        13280, _  ' 236 If no calls, recycle after
  942.                        13290, _  ' 237 Leave modem at initial baud
  943.                        12325, _  ' 238
  944.                        12325, _  ' 239
  945.                        12325     ' 240
  946.       GOTO 12325
  947. 12644 ON ILOOKUP GOSUB 13295, _  ' 241 Switch back when change comm. parms.
  948.                        13238, _  ' 242 Min. baud for new callers
  949.                        13242, _  ' 243 Min. baud for old callers
  950.                        13260, _  ' 244 Use CTS for modem flow control?
  951.                        13310, _  ' 245 Use XON/XOFF for flow control
  952.                        13270, _  ' 246 Max time to wait for carrier
  953.                        12325, _  ' 247
  954.                        12325, _  ' 248
  955.                        12325, _  ' 249
  956.                        12325, _  ' 250
  957.                        12325, _  ' 251
  958.                        12325, _  ' 252
  959.                        12325, _  ' 253
  960.                        12325, _  ' 254
  961.                        12325, _  ' 255
  962.                        12325, _  ' 256
  963.                        12325, _  ' 257
  964.                        12325, _  ' 258
  965.                        12325, _  ' 259
  966.                        12325     ' 260
  967.       GOTO 12325
  968. 12645 ON ILOOKUP GOSUB 26040, _  ' 261 Time of day to drop to DOS
  969.                        26070, _  ' 262 NET-MAIL driver to invoke
  970.                        26100, _  ' 263 Echo on command for host
  971.                        26110, _  ' 264 Echo off command for host
  972.                        13285, _  ' 265 Echo remote input?
  973.                        26105, _  ' 266 ASCII upload line acknowledge
  974.                        12325, _  ' 267
  975.                        12325, _  ' 268
  976.                        12325, _  ' 269
  977.                        12325, _  ' 270
  978.                        12325, _  ' 271
  979.                        12325, _  ' 272
  980.                        12325, _  ' 273
  981.                        12325, _  ' 274
  982.                        12325, _  ' 275
  983.                        12325, _  ' 276
  984.                        12325, _  ' 277
  985.                        12325, _  ' 278
  986.                        12325, _  ' 279
  987.                        12325     ' 280
  988.       GOTO 12325
  989. 12646 ON ILOOKUP GOSUB 17560, _  ' 281 Prompt new users for their preferences
  990.                        22550, _  ' 282 New users default sign-on mode
  991.                        22550, _  ' 283 New users default file-transfer mode
  992.                        22550, _  ' 284 Line feeds for new users default to
  993.                        22550, _  ' 285 Nulls for new users default to
  994.                        22550, _  ' 286 Prompt bell for new users defaults to
  995.                        22550, _  ' 287 New users 'graphics' ability is
  996.                        22550, _  ' 288 New users upper/lower case
  997.                        22550, _  ' 289 New users margins defaults are
  998.                        17570, _  ' 290 Remember new users
  999.                        17580, _  ' 291 Survive no user room
  1000.                        12325, _  ' 292
  1001.                        12325, _  ' 293
  1002.                        12325, _  ' 294
  1003.                        12325, _  ' 295
  1004.                        12325, _  ' 296
  1005.                        12325, _  ' 297
  1006.                        12325, _  ' 298
  1007.                        12325, _  ' 299
  1008.                        12325     ' 300
  1009.       GOTO 12325
  1010. 12647 ON ILOOKUP GOSUB 20000, _  ' 301 Drive for Library
  1011.                        20010, _  ' 302 Drive/path for directory
  1012.                        20020, _  ' 303 Extension for directory lists
  1013.                        20030, _  ' 304 Drive/path for work disk
  1014.                        20040, _  ' 305 # of disks in Library
  1015.                        20050, _  ' 306 # of Master directories
  1016.                        20060, _  ' 307 # of subdirectories in each master
  1017.                        20070, _  ' 308 Prefix of subdirectory on Library
  1018.                        20080, _  ' 309 Name of subsystem command menu
  1019.                        20090, _  ' 310 Symbols to use for menu commands
  1020.                        20090, _  ' 311 Security levels for menu functions
  1021.                        20100, _  ' 312 Drive/path of ARCHIVE utility
  1022.                        20110, _  ' 313 Name of ARCHIVE utility
  1023.                        12325, _  ' 314
  1024.                        12325, _  ' 315
  1025.                        12325, _  ' 316
  1026.                        12325, _  ' 317
  1027.                        12325, _  ' 318
  1028.                        12325, _  ' 319
  1029.                        12325     ' 320
  1030.       GOTO 12325
  1031. 12648 ON ILOOKUP GOSUB 26115, _  ' 321 Turn on Emphasis
  1032.                        26120, _  ' 322 Restore text to normal
  1033.                        12850, _  ' 323 1st Foreground Color
  1034.                        12860, _  ' 324 2nd Foreground Color
  1035.                        12870, _  ' 325 3rd Foreground Color
  1036.                        12880, _  ' 326 4th Foreground Color
  1037.                        12890, _  ' 327 Caller Background Color
  1038.                        12325, _  ' 328
  1039.                        12325, _  ' 329
  1040.                        12325, _  ' 330
  1041.                        12325, _  ' 331
  1042.                        12325, _  ' 332
  1043.                        12325, _  ' 333
  1044.                        12325, _  ' 334
  1045.                        12325, _  ' 335
  1046.                        12325, _  ' 336
  1047.                        12325, _  ' 337
  1048.                        12325, _  ' 338
  1049.                        12325, _  ' 339
  1050.                        12325     ' 340
  1051.       GOTO 12325
  1052. '
  1053. ' * LIST OF CONFERENCES TO SEARCH FOR NEW MAIL
  1054. '
  1055. 12670 CALL GETNUMYN ("Do you want to notify callers of conference mail",X)
  1056.       IF NOT X THEN _
  1057.          CONFMAIL.LIST$ = NONE.PICKED$ : _
  1058.          RETURN
  1059.       GOSUB 17340
  1060.       GOSUB 17740
  1061.       CONFMAIL.LIST$ = HJ$
  1062.       RETURN
  1063. '
  1064. ' * PROCESS NAME OF UPLOAD DIRECTORY
  1065. '
  1066. 12730 CALL ASKRO("Name of upload directory (8 char. max)?",24,HJ$)
  1067.       IF LEN(HJ$) < 1 OR _
  1068.          LEN(HJ$) > 8 THEN _
  1069.          GOTO 12730
  1070.       CALL ALLCAPS (HJ$)
  1071.       UPLOAD.DIRECTORY$ = HJ$
  1072.       RETURN
  1073. '
  1074. ' * Get the File Management System Directory
  1075. '
  1076. 12740 CALL ASKRO("Name of File Management System (or NONE) directory (8 char. max)?",24,HJ$)
  1077.       IF LEN(HJ$) > 8 THEN _
  1078.          GOTO 12740
  1079.       CALL ALLCAPS (HJ$)
  1080.       FMS.DIRECTORY$ = HJ$
  1081.       IF FMS.DIRECTORY$ = "NONE" THEN _
  1082.          FMS.DIRECTORY$ = ""
  1083.       RETURN
  1084. 12750 CALL ASKRO("Name (prefix, optional extension) of Personal directory",24,HJ$)
  1085.       IF LEN(HJ$) < 1 OR _
  1086.          LEN(HJ$) > 12 OR INSTR(HJ$,".") > 9 THEN _
  1087.          GOTO 12750
  1088.       CALL ALLCAPS (HJ$)
  1089.       PERSONAL.DIR$ = HJ$
  1090.       IF INSTR(PERSONAL.DIR$,".") < 1 THEN _
  1091.          PERSONAL.DIR$ = PERSONAL.DIR$ + _
  1092.                          ".DEF"
  1093.       RETURN
  1094. '
  1095. ' * GET THE SYSOP'S FIRST NAME
  1096. '
  1097. 12840 CALL ASKRO("What is the SYSOP's FIRST Name?",24,HJ$)
  1098.       IF LEN(HJ$) < 3 THEN _
  1099.          GOTO 12840
  1100.       CALL ALLCAPS (HJ$)
  1101.       SYSOP.FIRST.NAME$ = HJ$
  1102.       RETURN
  1103. 12850 CALL GETANSI (FG.1.DEF$," 1st")
  1104.       RETURN
  1105. 12860 CALL GETANSI (FG.2.DEF$," 2nd")
  1106.       RETURN
  1107. 12870 CALL GETANSI (FG.3.DEF$," 3rd")
  1108.       RETURN
  1109. 12880 CALL GETANSI (FG.4.DEF$," 4th")
  1110.       RETURN
  1111. 12890 CALL GETCOLOR("Caller's BACKGROUND color",CALLER.BKGRD)
  1112.       RETURN
  1113. '
  1114. ' * PROCESS THE SYSOP'S LAST NAME
  1115. '
  1116. 12910 CALL ASKRO("What is the SYSOP's LAST Name?",24,HJ$)
  1117.       IF LEN(HJ$) < 3 THEN _
  1118.          GOTO 12840
  1119.       CALL ALLCAPS (HJ$)
  1120.       SYSOP.LAST.NAME$ = HJ$
  1121.       RETURN
  1122. '
  1123. ' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY
  1124. '
  1125. 12980 CALL ASKRO("Secret first name that lets remote caller on as SYSOP is?",24,SYSOP.PASSWORD.1$)
  1126.       CALL ALLCAPS (SYSOP.PASSWORD.1$)
  1127.       IF SYSOP.PASSWORD.1$ = "" THEN _
  1128.          GOTO 12985
  1129.       MN1$ = SYSOP.PASSWORD.1$
  1130.       CALL ASKRO("Secret last name for remote SYSOP ([ENTER] disables)?",24,SYSOP.PASSWORD.2$)
  1131.       CALL ALLCAPS (SYSOP.PASSWORD.2$)
  1132.       IF SYSOP.PASSWORD.2$ = "" THEN _
  1133.          GOTO 12985
  1134.       MN2$ = SYSOP.PASSWORD.2$
  1135.       RETURN
  1136. 12985 MN1$ = "(Disabled)"
  1137.       MN2$ = ""
  1138.       RETURN
  1139. 12990 CALL GETNUMYN ("ESCAPE immediately lets on locally (NO=require name)",ESCAPE.INSECURE)
  1140.       RETURN
  1141. '
  1142. ' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM
  1143. '
  1144. 13000 CALL ASKRO ("Mail to caller to report on logon: A)ll, N)ew only, S)kip (none)",24,HJ$)
  1145.       IF LEN(HJ$) < 1 THEN _
  1146.          GOTO 13000
  1147.       LOGON.MAIL.LEVEL$ = LEFT$(HJ$,1)
  1148.       CALL ALLCAPS (LOGON.MAIL.LEVEL$)
  1149.       IF INSTR("ANS",LOGON.MAIL.LEVEL$) = 0 THEN _
  1150.          GOTO 13000
  1151.       RETURN
  1152. 13030 IF BYPASS = 0 THEN _
  1153.          BYPASS$ = "Any user" : _
  1154.          RETURN
  1155.       IF BYPASS = 1 THEN _
  1156.          BYPASS$ = "All but new users" : _
  1157.          RETURN
  1158.       IF BYPASS = 2 THEN _
  1159.          BYPASS$ = "Only EXPERT users" : _
  1160.          RETURN
  1161.       IF I = 0 THEN _
  1162.          CALL GETINIT ("Specify the security level required to bypass messages. ",24,-32767,32767,X,CR) : _
  1163.          X$=STR$(X)
  1164.       BYPASS$ = "Security >" + _
  1165.                 STR$(VAL(X$)) + _
  1166.                 " users"
  1167.       RETURN
  1168. '
  1169. ' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME
  1170. '
  1171. 13131 CALL ASKRO("Enter name for this RBBS-PC (19 characters or less) ",24,HJ$)
  1172.       IF LEN(HJ$) > 19 THEN _
  1173.          GOTO 13131
  1174.       CALL ALLCAPS (HJ$)
  1175.       RBBS.NAME$ = HJ$
  1176.       RETURN
  1177. '
  1178. ' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE
  1179. '
  1180. 13140 CALL ASKRO("SYSOP's default sign-on mode (E)xpert, N)ovice)? ",24,HJ$)
  1181.       IF LEN(HJ$) = 6 OR _
  1182.          LEN(HJ$) = 1 THEN _
  1183.          GOTO 13170
  1184.       GOTO 13140
  1185. 13170 CALL ALLCAPS (HJ$)
  1186.       IF HJ$ = "E" OR _
  1187.          HJ$ = "EXPERT" THEN _
  1188.          EXPERT.USER$ = "EXPERT" : _
  1189.          RETURN
  1190.       IF HJ$ = "N" OR _
  1191.          HJ$ = "NOVICE" THEN _
  1192.          EXPERT.USER$ = "NOVICE" : _
  1193.          RETURN
  1194.       GOTO 13140
  1195. 13180 IF INSTR (PERSONAL.DIR$,".") = 0 THEN _
  1196.          X$ = PERSONAL.DIR$ + ".DEF" _
  1197.       ELSE X$ = PERSONAL.DIR$
  1198.       CALL CHKPERSDIR (PERSONAL.DRVPATH$+X$,MAX.DESC.LEN,PERSONAL.LEN)
  1199.       RETURN
  1200. '
  1201. ' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS"
  1202. '
  1203. 13210 CALL GETINIT ("What is the earliest SYSOP wants to be paged? -- HHMM ",24,0,2359,START.OFFICE.HOURS,CR)
  1204.       IF CR THEN _
  1205.          GOTO 13210
  1206. 13216 CALL GETINIT ("What is the latest SYSOP wants to be paged? -- HHMM ",24,0,2359,END.OFFICE.HOURS,CR)
  1207.       IF CR THEN _
  1208.          GOTO 13216
  1209.       IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
  1210.          SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
  1211.       RETURN
  1212. '
  1213. ' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING
  1214. '
  1215. 13224 CALL GETYESNO ("Use on-line printer's bell to the page SYSOP?",M11$)
  1216.       RETURN
  1217. '
  1218. ' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING
  1219. '
  1220. 13228 A$ = ""
  1221.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1"
  1222. 13229 CALL GETINIT ("How many rings should RBBS-PC wait before answering? ",24,0,255,REQUIRED.RINGS,CR)
  1223.       IF CR THEN _
  1224.          GOTO 13229
  1225.       IF REQUIRED.RINGS = 0 THEN _
  1226.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "1Q0X1" : _
  1227.          RETURN
  1228. 13233 CALL GETNUMYN ("Next call answered after" + _
  1229.              STR$(REQUIRED.RINGS) + _
  1230.              " rings. Do you want ringback?",AB)
  1231.       IF NOT AB THEN _
  1232.          GOTO 13237
  1233. 13235 IF REQUIRED.RINGS > 5 THEN _
  1234.          A$ = "(<6 for ringback)" : _
  1235.          GOTO 13229
  1236.       MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "255  "
  1237.       RETURN
  1238. 13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,5) = "254  "
  1239.       RETURN
  1240. 13238 CALL MMINTEGER ("Minimum baud required for NEW callers",0,32000,MIN.NEWCALLER.BAUD)
  1241.       RETURN
  1242. 13242 CALL MMINTEGER ("Minimum baud required for OLD callers",0,32000,MIN.OLDCALLER.BAUD)
  1243.       RETURN
  1244. 13249 CALL GETNUMYN ("Should RBBS-PC go off-line when DISK FULL occurs ",DISKFULL.GO.OFFLINE)
  1245.       RETURN
  1246. '
  1247. ' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE
  1248. '
  1249. 13253 CALL ASKRO ("Specify single drive in the range A->" + _
  1250.             M$ + _
  1251.             " for "+A$,24,HJ$)
  1252.       IF LEN(HJ$) <> 1 THEN _
  1253.          GOTO 13253
  1254.       CALL ALLCAPS (HJ$)
  1255.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1256.          GOTO 13253
  1257.       RETURN
  1258. '
  1259. ' * ALLOW THE SYSOP TO ELECT TO USE RTS FOR MODEM FLOW CONTROL
  1260. '
  1261. 13260 CALL GETYESNO ("Does your modem use the CTS signal for flow control",RTS$)
  1262.       RETURN
  1263. 13270 CALL MMINTEGER ("Seconds to wait for carrier after detecting a call",5,999,MAX.CARRIER.WAIT)
  1264.       RETURN
  1265. 13280 CALL MMINTEGER ("Wait how many minutes before recycling if no calls (0=forever)",0,32400,RECYCLE.WAIT)
  1266.       RETURN
  1267. 13285 CALL ASKRO ("What caller types is ECHOed by R)BBS, I)nter host, C)aller's pgm",24,DEFAULT.ECHOER$)
  1268.       IF LEN(DEFAULT.ECHOER$) < 1 THEN _
  1269.          GOTO 13285
  1270.       DEFAULT.ECHOER$ = LEFT$(DEFAULT.ECHOER$,1)
  1271.       CALL ALLCAPS (DEFAULT.ECHOER$)
  1272.       IF INSTR("ICR",DEFAULT.ECHOER$) < 1 THEN _
  1273.          GOTO 13285
  1274.       RETURN
  1275. 13290 CALL GETNUMYN ("Leave modem at init baud rate (don't match caller)",KEEP.INIT.BAUD)
  1276.       RETURN
  1277. 13295 CALL GETNUMYN ("Switch back comm settings if changed for up/down load",SWITCH.BACK)
  1278.       RETURN
  1279. 13310 CALL GETNUMYN ("Always respect XON/XOFF for flow control",XON.XOFF)
  1280.       RETURN
  1281. 13320 CALL GETNUMYN ("CONFIG.SYS includes an ANSI device driver",DOSANSI)
  1282.       RETURN
  1283. 13330 CALL MMINTEGER ("ASCII value for SMART TEXT control (0=NONE)",0,255,SMART.TEXT)
  1284.       RETURN
  1285. '
  1286. ' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED
  1287. '
  1288. 13470 CALL ASKRO ("Specify download drives (max of" + _
  1289.             STR$(MAXD) + _
  1290.             " in the range A-> " + M$ + "). ",24,HJ$)
  1291.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
  1292.          GOTO 13470
  1293.       CALL ALLCAPS (HJ$)
  1294.       FOR I = 1 TO LEN(HJ$)
  1295.          A$(I) = MID$(HJ$,I,1)
  1296.       NEXT
  1297.       FOR I = 1 TO LEN(HJ$)
  1298.          IF A$(I) < "A" OR A$(I) > M$ THEN _
  1299.             GOTO 13470
  1300.       NEXT
  1301.       DRIVES.FOR.DOWNLOADS$ = HJ$
  1302.       IF DNLD.SUB < 1 THEN _
  1303.          RETURN
  1304.       FOR I = 1 TO DNLD.SUB
  1305.          IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
  1306.             DNLD$(I) = ""
  1307.       NEXT
  1308.       STOPIT = DNLD.SUB
  1309.       FOR I = 1 TO STOPIT
  1310.  
  1311.          IF DNLD$(I) <> "" THEN _
  1312.             GOTO 13583
  1313.          DNLD$(I) = DNLD$(I + 1)
  1314.          DNLD$(I + 1) = ""
  1315. 13583 NEXT
  1316.       DNLD.SUB = 0
  1317.       FOR I = 1 TO STOPIT
  1318.          IF DNLD$(I) <> "" THEN _
  1319.             DNLD.SUB = DNLD.SUB + 1
  1320.       NEXT
  1321.       RETURN
  1322. 13593 MAX = 3
  1323. 13599 CALL ASKRO (A$,24,HJ$)
  1324.       CALL ALLCAPS (HJ$)
  1325.       IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
  1326.          GOTO 13599
  1327.       I = 0
  1328.       GOSUB 25920
  1329.       IF I = 0 THEN _
  1330.          RETURN
  1331.       GOTO 13599
  1332. '
  1333. ' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND?
  1334. '
  1335. 13750 CALL ASKRO ("Prompt bell default? (ON or OFF) ",24,PROMPT.BELL$)
  1336.       IF LEN(PROMPT.BELL$) < 1 OR _
  1337.          LEN(PROMPT.BELL$) > 3 THEN _
  1338.          GOTO 13750
  1339.       CALL ALLCAPS (PROMPT.BELL$)
  1340.       IF PROMPT.BELL$ = "ON"  THEN _
  1341.          RETURN
  1342.       IF PROMPT.BELL$ = "OFF" THEN _
  1343.          RETURN
  1344.       GOTO 13750
  1345. '
  1346. ' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT)
  1347. '
  1348. 13840 CALL GETINIT ("Maximum minutes per session a user can stay on the system ",24,0,1440,MIN,CR)
  1349.       IF CR THEN _
  1350.          GOTO 13840
  1351.       MINUTES.PER.SESSION! = MIN
  1352.       RETURN
  1353. '
  1354. ' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED
  1355. '
  1356. 13890 J = 999
  1357.       IF ((MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIUM.NUMBER.OF.NODES) / 5) < J THEN _
  1358.          J = (MAX.MSG.FILE.SIZE.FRM.DEF! - 1 - MAXIMUM.NUMBER.OF.NODES) / 5
  1359.       CALL GETINIT ("Set maximum number of messages allowed (MAX = " + _
  1360.             STR$(FIX(J)) + _
  1361.             ")",24,1,999,MAX.ALLOWED.MSGS.FRM.DEF,CR)
  1362.       IF CR THEN _
  1363.          GOTO 13890
  1364.       IF MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
  1365.          GOTO 13929
  1366.       CALL GETNUMYN ("Increase the " + _
  1367.                       MAIN.MESSAGE.FILE$ + _
  1368.                      " file to " + _
  1369.                        STR$((MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES) + _
  1370.                      " records?",AB)
  1371.       IF NOT AB THEN _
  1372.          GOTO 13890
  1373. 13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1374.       GOSUB 30450
  1375.       B3! = (MAX.ALLOWED.MSGS.FRM.DEF * 5) + 1 + MAXIMUM.NUMBER.OF.NODES
  1376.       GOSUB 22080
  1377.       RETURN
  1378. 13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
  1379.       GOSUB 30450
  1380.       RETURN
  1381. 13940 CALL ANYINTEGER ("Set number of months before an inactive user is purged. ",ACT.MNTHS.B4.DELETING)
  1382.       IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
  1383.          GOTO 13940
  1384.       RETURN
  1385. 14120 COMMIN = 1
  1386.       COMMAX = 8
  1387.       CALL ANYINTEGER ("# of communication port to use (" + _
  1388.                    MID$(STR$(COMMIN),2) + _
  1389.                   "-" + _
  1390.                   MID$(STR$(COMMAX),2) + _
  1391.                   ", or 0 for LOCAL WORKSTATION)? ",X)
  1392.       IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
  1393.          GOTO 14120
  1394.       COM.PORT$ = "COM" + MID$(STR$(X),2)
  1395.       IF X = 0 THEN _
  1396.          LSB = 1016 : _
  1397.          RETURN
  1398. 14121 CALL GETNUMYN ("Use FOSSIL driver support",FOSSIL)
  1399.       IF FOSSIL THEN _
  1400.          GOTO 14125
  1401.       IF X < 3 THEN _
  1402.          GOTO 14123
  1403.       CALL GETNUMYN("BASIC does not support " + COM.PORT$ + ".  Do you wish to change it?",AB)
  1404.       IF AB THEN _
  1405.          GOTO 14120
  1406.       GOTO 14121
  1407. 14123 IF X = 1 THEN _
  1408.          LSB = 1016 _
  1409.       ELSE IF X = 2 THEN _
  1410.               LSB = 760
  1411.       IF PCJR THEN _
  1412.          LSB = 760
  1413.       RETURN
  1414. 14125 CALL ASKRO("Enter port address. i.e. 3F8? ",24,HJ$)
  1415.       IF LEN(HJ$) <> 3 THEN _
  1416.          GOTO 14125
  1417. 14130 CALL ALLCAPS (HJ$)
  1418.       B = 3
  1419.       GOSUB 14789
  1420.       IF A < 0 THEN _
  1421.          GOTO 14125
  1422.       LSB = A
  1423.       B = 2
  1424.       GOSUB 14789
  1425.       IF A < 0 THEN _
  1426.          GOTO 14125
  1427.       LSB = LSB + A * 16
  1428.       B = 1
  1429.       GOSUB 14789
  1430.       IF A < 0 THEN _
  1431.          GOTO 14125
  1432.       LSB = LSB + A * 256
  1433.       RETURN
  1434. 14789 A = INSTR("0123456789ABCDEF",MID$(HJ$,B,1)) - 1
  1435.       RETURN
  1436. '
  1437. ' *  DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES
  1438. '
  1439. 14790 GOSUB 15200
  1440.       DRIVE.FOR.BULLETINS$ = HJ$
  1441.       GOSUB 14970
  1442.       BULLETIN.MENU$ = HJ$
  1443.       RETURN
  1444. '
  1445. ' *  PREFIX USED TO NAME BULLETIN FILES
  1446. '
  1447. 14800 GOSUB 14970
  1448.       IF LEN(HJ$) > 6 THEN _
  1449.          RETURN
  1450.       BULLETIN.PREFIX$ = HJ$
  1451.       RETURN
  1452. '
  1453. ' *  DRIVE AND PATH FOR THREE MAJOR 'HELP' FILES
  1454. '
  1455. 14810 GOSUB 15200
  1456.       HELP.PATH$ = HJ$
  1457.       RETURN
  1458. 14815 GOSUB 15200
  1459.       QUES.PATH$ = HJ$
  1460.       RETURN
  1461. '
  1462. ' *  PREFIX FOR FOR THREE MAJOR 'HELP' FILES
  1463. '
  1464. 14820 GOSUB 14970
  1465.       IF LEN(HJ$) > 7 THEN _
  1466.          RETURN
  1467.       HELP.FILE.PREFIX$ = HJ$
  1468.       RETURN
  1469. '
  1470. ' *  NAME OF 'NEWUSER' FILE
  1471. '
  1472. 14825 A$ = "File extension for help files (max 3 chars)"
  1473.       GOSUB 13593
  1474.       HELP.EXTENSION$ = HJ$
  1475.       RETURN
  1476. 14830 GOSUB 17340
  1477.       NEWUSER.FILE$ = HJ$
  1478.       RETURN
  1479. '
  1480. ' *  NAME OF 'WELCOME' FILE
  1481. '
  1482. 14840 GOSUB 17340
  1483.       WELCOME.FILE$ = HJ$
  1484.       RETURN
  1485. '
  1486. ' *  NAME OF 'FILE DIRECTORY' FILE'S EXTENSION
  1487. '
  1488. 14850 A$ = "Extension for RBBS directory files (3 char. max)."
  1489.       GOSUB 13593
  1490.       DIRECTORY.EXTENTION$ = HJ$
  1491.       RETURN
  1492. 14855 CALL ASKRO ("Alternate extension for RBBS directory files ",24,HJ$)
  1493.       IF LEN(HJ$) > 3 THEN _
  1494.          GOTO 14855
  1495.       CALL ALLCAPS (HJ$)
  1496.       ALTDIR.EXTENSION$ = HJ$
  1497.       RETURN
  1498. 14857 A$ = "PREFIX of name of directory of directories "
  1499.       MAX = 8
  1500.       GOSUB 13599
  1501.       DIRECTORY.PREFIX$ = HJ$
  1502.       RETURN
  1503. '
  1504. ' *  NAME OF THE SYSOP'S MENU
  1505. '
  1506. 14860 GOSUB 17340
  1507.       MENU$(1) = HJ$
  1508.       RETURN
  1509. '
  1510. ' *  NAME OF MAIN MESSAGES SUBSECTION'S MENU
  1511. '
  1512. 14870 GOSUB 17340
  1513.       MENU$(2) = HJ$
  1514.       RETURN
  1515. '
  1516. ' *  NAME OF FILE SUBSECTION'S MENU
  1517. '
  1518. 14880 GOSUB 17340
  1519.       MENU$(3) = HJ$
  1520.       RETURN
  1521. '
  1522. ' *  NAME OF UTILITIES SUBSECTION'S MENU
  1523. '
  1524. 14890 GOSUB 17340
  1525.       MENU$(4) = HJ$
  1526.       RETURN
  1527. '
  1528. ' *  NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE
  1529. '
  1530. 14900 GOSUB 17340
  1531.       CONFERENCE.MENU$ = HJ$
  1532.       RETURN
  1533. '
  1534. ' *  GET ANSWER MENU
  1535. '
  1536. 14905 GOSUB 17340
  1537.       ANS.MENU$ = HJ$
  1538.       RETURN
  1539. '
  1540. ' *  NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES
  1541. '
  1542. 14910 GOSUB 17340
  1543.       TRASHCAN.FILE$ = HJ$
  1544.       RETURN
  1545. 14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
  1546.       IF LEN(UPCAT.HELP$) > 7 THEN 14915
  1547.       CALL ALLCAPS (UPCAT.HELP$)
  1548.       RETURN
  1549. '
  1550. ' *  DRIVE AVAILABLE FOR UPLOADING
  1551. '
  1552. 14920 A$ = "uploading "
  1553.       GOSUB 13253
  1554.       DRIVE.FOR.UPLOADS$ = HJ$
  1555.       IF LEN(UPLOAD.SUBDIR$) > 1 THEN _
  1556.          MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
  1557.       RETURN
  1558. '
  1559. ' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG
  1560. '
  1561. 14970 X$ = OPTION$
  1562. 14980 CALL ASKRO ("Specify name of the file for parameter " + X$ + ".",24,HJ$)
  1563.       CALL ALLCAPS (HJ$)
  1564.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
  1565.          GOTO 14980
  1566.       L1 = INSTR(HJ$,".")
  1567.       IF L1 = 0 THEN _
  1568.          IF LEN(HJ$) < 9 THEN _
  1569.             GOTO 15045 ELSE _
  1570.       GOTO 14980
  1571.       IF L1 > 9 THEN _
  1572.          GOTO 14980
  1573.       IF L1 < 2 THEN _
  1574.          GOTO 14980
  1575.       IF LEN(HJ$) - L1 > 3 THEN _
  1576.          GOTO 14980
  1577. 15045 I = 0
  1578.       GOSUB 25920
  1579.       IF I = 0 THEN _
  1580.          RETURN
  1581.       GOTO 14980
  1582. '
  1583. ' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG
  1584. '
  1585. 15170 CALL ASKRO ("Specify drive in the range A->" + _
  1586.                    M$ + _
  1587.                   " for parameter " + _
  1588.                    X$ + _
  1589.                   ". ",24,HJ$)
  1590.       IF LEN(HJ$) <> 1 THEN _
  1591.          GOTO 15170
  1592.       CALL ALLCAPS (HJ$)
  1593.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  1594.          GOTO 15170
  1595.       TB$ = HJ$
  1596.       RETURN
  1597. '
  1598. ' *  GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH
  1599. '
  1600. 15200 X$ = OPTION$
  1601. 15205 CALL ASKRO ("Specify drive/path (A->" + M$ + ") for parameter " + X$ + ".",24,HJ$)
  1602.       IF LEN(HJ$) < 1 THEN _
  1603.          GOTO 15205
  1604.       CALL ALLCAPS (HJ$)
  1605.       IF LEN(HJ$) = 1 THEN _
  1606.          HJ$ = HJ$ + ":"
  1607.       IF MID$(HJ$,2,1) = ":" THEN _
  1608.         IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN _
  1609.            GOTO 15205
  1610.       IF LEN(HJ$) > 2 THEN _
  1611.          IF MID$(HJ$,3,1) <> "\" THEN _
  1612.             GOTO 15205
  1613.       IF INSTR(HJ$,"\") > 0 THEN _
  1614.         IF RIGHT$(HJ$,1) <> "\" THEN _
  1615.            HJ$ = HJ$ + "\"
  1616.       STRNG$ = HJ$
  1617.       GOSUB 60470
  1618.       IF NOT IS.OK THEN _
  1619.          GOTO 15205
  1620.       TB$ = HJ$
  1621.       RETURN
  1622. 15230 RETURN
  1623. 15234 CALL ANYNUMBER ("Extend by what fraction of time uploading ",UPLOAD.TIME.FACTOR!)
  1624.       IF UPLOAD.TIME.FACTOR! <= 1.0 THEN _
  1625.          RETURN
  1626.       CLS
  1627.       LOCATE 10,1
  1628.       PRINT "     An upload time credit factor > 1 means that uploaders may get more"
  1629.       PRINT "     time credited than their total session time.   Such a credit normally"
  1630.       PRINT "     survives only for the day on which the upload is made."
  1631.       CALL GETNUMYN ("Make upload time credits survive forever until used",KEEP.TIME.CREDITS)
  1632.       RETURN
  1633. 15240 CALL MMINTEGER ("How many seconds of delay after modem initilization (1 to 99)?",1,99,MODEM.INIT.WAIT.TIME)
  1634.       RETURN
  1635. 15250 CALL MMINTEGER ("# seconds to delay prior to issuing modem commands (0 to 99)?",1,99,MODEM.COMMAND.DELAY.TIME)
  1636.       RETURN
  1637. 15290 CALL MMINTEGER ("Enter number of active 'bulletins' (0 to 99)",0,99,ACTIVE.BULLETINS)
  1638.       RETURN
  1639. 15310 CALL ANYINTEGER ("Min security to read new PRIVATE messages",PRIVATE.READ.SEC)
  1640.       RETURN
  1641. 15320 CALL ANYINTEGER ("Min security to read new PUBLIC messages",PUBLIC.READ.SEC)
  1642.       RETURN
  1643. 15330 CALL ANYINTEGER ("Min security to change msg read security",SEC.CHANGE.MSG)
  1644.       RETURN
  1645. '
  1646. ' * DETERMINE THE NAME OF THE "MESSAGES" FILE
  1647. '
  1648. 15460 GOSUB 17340
  1649.       MAIN.MESSAGE.FILE$ = HJ$
  1650.       MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
  1651.       MAINMSG$ = MAIN.MESSAGE.FILE$
  1652.       RETURN
  1653. '
  1654. ' * DETERMINE THE NAME OF THE "CALLERS" FILE
  1655. '
  1656. 15461 CALL GETNUMYN ("Do you want a CALLERS log file",X)
  1657.       IF NOT X THEN _
  1658.          CALLERS.FILE$ = NONE.PICKED$ : _
  1659.          RETURN
  1660.       GOSUB 17340
  1661.       CALLERS.FILE$ = HJ$
  1662.       RETURN
  1663. '
  1664. ' * DETERMINE THE NAME OF THE "COMMENTS" FILE
  1665. '
  1666. 15464 GOSUB 17340
  1667.       COMMENTS.FILE$ = HJ$
  1668.       RETURN
  1669. '
  1670. ' * DETERMINE THE NAME OF THE "USERS" FILE
  1671. '
  1672. 15500 GOSUB 17340
  1673.       MAIN.USER.FILE$ = HJ$
  1674.       MAINUSR$ = MAIN.USER.FILE$
  1675.       RETURN
  1676. 15530 CALL GETCOLOR ("Foreground",FG)
  1677.       CALL ASKRO ("Make foreground [N]ormal, or I)ntense (bright)",24,ANS$)
  1678.       CALL ALLCAPS (ANS$)
  1679.       IF LEFT$(ANS$,1) = "I" THEN _
  1680.          FG = FG + 8
  1681.       RETURN
  1682. 15590 CALL GETCOLOR ("Background",BG)
  1683.       RETURN
  1684. 15650 CALL GETCOLOR ("Border",BORDER)
  1685.       RETURN
  1686.  
  1687. '
  1688. ' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED?
  1689. '
  1690. 15710 CLS
  1691.       GOSUB 15780
  1692.       A$ = "RBBS-PC to use modem commands you specified as follows:"
  1693.       IF M14$ = "YES" THEN _
  1694.          A$ ="RBBS-PC to use standard modem commands as follows:"
  1695.       PRINT A$
  1696.       PRINT ""
  1697.       PRINT "1. Reset the modem                : " + USER.RESET.COMMAND$
  1698.       PRINT ""
  1699.       PRINT "2. Initialize the modem           : " + USER.INIT.COMMAND$
  1700.       PRINT "   Note: End item 2 with:"
  1701.       PRINT "     S0=1Q0X1 if answer on 0 rings"
  1702.       PRINT "     S0=254 if answer on >0 rings (no ring-back)"
  1703.       PRINT "     S0=255 if answer on >0 rings (with ring-back)"
  1704.       PRINT ""
  1705.       PRINT "3. Count the number of rings      : " + USER.COUNT.RINGS.COMMAND$
  1706.       PRINT ""
  1707.       PRINT "4. Answer the phone               : " + USER.ANSWER.COMMAND$
  1708.       PRINT ""
  1709.       PRINT "5. Take the phone off the hook    : " + USER.GO.OFFHOOK.COMMAND$
  1710.       PRINT ""
  1711.       PRINT "6. Clear the modem's firmware     : " + USER.FIRMWARE.CLEAR.CMND$
  1712.       PRINT ""
  1713.       PRINT "7. Initialize modem's firmware    : " + USER.INITIALIZE.COMMAND$
  1714.       PRINT "   Note: End item 7 with:"
  1715.       PRINT "     Q1 if item 2 ends with S0=255"
  1716.       PRINT ""
  1717.       PRINT "8. Write to modem's firmware      : " + USER.FIRMWARE.WRITE.CMND$
  1718.       CALL GETINIT ("Specify command to change (1 to 8), CR to end, or 0 to reset to defaults)",24,0,8,I,CR)
  1719.       IF CR THEN _
  1720.          RETURN
  1721.       IF I <> 0 THEN _
  1722.          GOTO 15711
  1723.       GOSUB 15790
  1724.       GOTO 15710
  1725. 15711 CALL ASKRO ("Enter modem command for item" + _
  1726.                    STR$(I) + _
  1727.                   " :",24,HJ$)
  1728.       CALL ALLCAPS (HJ$)
  1729.       ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
  1730. 15712 USER.RESET.COMMAND$ = HJ$
  1731.       GOTO 15710
  1732. 15714 USER.INIT.COMMAND$ = HJ$
  1733.       GOTO 15710
  1734. 15716 USER.COUNT.RINGS.COMMAND$ = HJ$
  1735.       GOTO 15710
  1736. 15718 USER.ANSWER.COMMAND$ = HJ$
  1737.       GOTO 15710
  1738. 15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
  1739.       GOTO 15710
  1740. 15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
  1741.       GOTO 15710
  1742. 15724 USER.INITIALIZE.COMMAND$ = HJ$
  1743.       GOTO 15710
  1744. 15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
  1745.       GOTO 15710
  1746. 15780 M14$ = "NO"
  1747.       IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
  1748.          MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
  1749.          MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
  1750.          MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=") - 1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=") - 1)  AND _
  1751.          MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
  1752.          FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
  1753.          FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
  1754.          FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
  1755.          M14$ = "YES"
  1756.       RETURN
  1757. 15790 FIRMWARE.INITIALIZE.COMMAND$ = "AT&C1&D3B1E0V1M0S0=0&T5"
  1758.       FIRMWARE.CLEAR.COMMAND$ = "AT&F"
  1759.       FIRMWARE.WRITE.COMMAND$ = "&W"
  1760.       USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
  1761.       USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
  1762.       USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
  1763.       USER.INIT.COMMAND$ = MODEM.INIT.COMMAND$
  1764.       USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
  1765.       USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
  1766.       USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
  1767.       USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
  1768.       RETURN
  1769. 15800 CALL GETNUMYN ("Remind users of the messages they left?",MESSAGE.REMINDER)
  1770.       RETURN
  1771. 15820 CALL GETNUMYN ("Use machine language routines for speed",TURBO.RBBS)
  1772.       RETURN
  1773. 15825 CALL GETNUMYN ("Not BASIC = use DOS calls (need for local color graphics)",USE.BASIC.WRITES)
  1774.       RETURN
  1775. 15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
  1776.       RETURN
  1777. 15835 CALL GETNUMYN ("YES means to stop rather than scroll away previous text",MENUS.CAN.PAUSE)
  1778.       RETURN
  1779. 15840 CALL GETNUMYN ("Are system bulletins to be optional?",BULLETINS.OPTIONAL)
  1780.       RETURN
  1781. 15850 GOSUB 15200
  1782.       MACRO.DRVPATH$ = HJ$
  1783.       RETURN
  1784. 15860 A$ = "File extension for macro files (max 3 chars)"
  1785.       GOSUB 13593
  1786.       MACRO.EXTENSION$ = HJ$
  1787.       RETURN
  1788. 15880 CALL GETNUMYN ("Is non-ascii protocol required for binary files?",REQUIRE.NON.ASCII)
  1789.       RETURN
  1790. 15911 CALL GETNUMYN("Enable MICROCOM's MNP protocol?",MNP.SUPPORT)
  1791.       RETURN
  1792. 15920 CALL GETYESNO ("Is " + _
  1793.                       DIRECTORY.EXTENTION$ + _
  1794.                       " omitted from the N)ew command?",OMIT.MAIN.DIRECTORY$)
  1795.       RETURN
  1796. 15991 CALL GETNUMYN ("Do you want EXTENDED logging to the 'callers' file",EXTENDED.LOGGING)
  1797.       RETURN
  1798. 15993 CALL GETNUMYN ("Do you want 'comments' recorded as private messages",COMMENTS.AS.MESSAGES)
  1799.       RETURN
  1800. 16000 CALL GETNUMYN ("Is system 'welcome' interruptable",WELCOME.INTERRUPTABLE)
  1801.       RETURN
  1802. 16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
  1803.       RETURN
  1804. 16032 CALL MMINTEGER ("Size of stack space to be set aside",1,32767,SIZE.OF.STACK)
  1805.       RETURN
  1806. 16033 CALL MMINTEGER ("Security level exempt from 'epi-log'",1,32767,SECURITY.EXEMPT.FROM.EPILOG)
  1807.       RETURN
  1808. '
  1809. ' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON
  1810. '
  1811. 16040 CLS
  1812.       LOCATE 5,5
  1813.       PRINT "Please select the type of PC which RBBS-PC will be running on  :"
  1814.       LOCATE 7,10
  1815.       PRINT "0.   IBM PC, IBM XT, or IBM AT"
  1816.       LOCATE 9,10
  1817.       PRINT "1.   Compaq/Plus or compatable that uses interrupt 7F"
  1818.       LOCATE 11,10
  1819.       PRINT "2.   IBM PCjr
  1820.       LOCATE 13,10
  1821.       PRINT "3.   Other compatable under IBM's DOS (i.e. PC-DOS)
  1822. 16050 CALL GETINIT ("Select environment (0 to 3, CR to end)",24,0,3,COMPUTER.TYPE,CR)
  1823.       IF CR THEN _
  1824.          RETURN
  1825. 16062 ON COMPUTER.TYPE+1 GOTO 16063,16064,16065,16066
  1826. 16063 COMPUTER.TYPE$ = "IBM PC, XT, or AT"
  1827.       RETURN
  1828. 16064 COMPUTER.TYPE$ = "Compaq/Plus"
  1829.       RETURN
  1830. 16065 COMPUTER.TYPE$ = "PCjr"
  1831.       GOTO 16071
  1832. 16066 COMPUTER.TYPE$ = "Other under PC-DOS"
  1833.       RETURN
  1834. 16071 CALL GETNUMYN ("Is an IBM PCjr Internal Modem installed? (YES or NO)",PCJR)
  1835.       IF PCJR THEN _
  1836.          LSB = 760
  1837. 16073 RETURN
  1838. 16121 CALL GETNUMYN ("Wait to issue modem commands between rings?",COMMANDS.BETWEEN.RINGS)
  1839.       RETURN
  1840. 16124 CALL MMINTEGER ("Enter baud rate (300,1200,2400,4800,9600,19200) to open modem at ",300,19200,B1)
  1841.       IF B1 = 300 OR B1 = 1200 OR B1 = 2400 OR B1 = 4800 OR B1 = 9600 OR _
  1842.          B1 = 19200 THEN _
  1843.             GOTO 16128 _
  1844.       ELSE GOTO 16124
  1845. 16128 MODEM.INIT.BAUD$ = MID$(STR$(B1),2)
  1846.       RETURN
  1847. '
  1848. ' *  NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS'
  1849. '
  1850. 16130 GOSUB 17340
  1851.       MENU$(5) = HJ$
  1852.       RETURN
  1853. '
  1854. ' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR'
  1855. '
  1856. 16140 GOSUB 17340
  1857.       RCTTY.BAT$ = HJ$
  1858.       RETURN
  1859. '
  1860. ' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR'
  1861. '
  1862. 16150 GOSUB 17340
  1863.       RBBS.BAT$ = HJ$
  1864.       RETURN
  1865. '
  1866. ' * DRIVE/PATH TO LOOK FOR 'COMMAND.COM' ON
  1867. '
  1868. 16160 GOSUB 15200
  1869.       DISK.FOR.DOS$ = HJ$
  1870.       RETURN
  1871. 16170 CALL GETNUMYN ("Redirect I/O via the CTTY command on dropping to DOS?",REDIRECT.IO.METHOD)
  1872. 16175 CALL GETNUMYN ("Redirect I/O via a device named in CONFIG.SYS?",B1)
  1873.       IF B1 THEN _
  1874.          GOTO 16176
  1875.       USE.DEVICE.DRIVER$ = ""
  1876.       RETURN
  1877. 16176 IF LEN (USE.DEVICE.DRIVER$) > 0 THEN _
  1878.          GOTO 16177
  1879.       CALL ASKRO("Enter name of the device to use. ",24,USE.DEVICE.DRIVER$)
  1880.       IF LEN (USE.DEVICE.DRIVER$) > 8 THEN _
  1881.          GOTO 16176
  1882.       IF LEN (USE.DEVICE.DRIVER$) = 0 THEN _
  1883.          RETURN
  1884. 16177 CALL GETNUMYN ("Use the device named " + USE.DEVICE.DRIVER$ + "?",B1)
  1885.       IF B1 THEN _
  1886.          RETURN
  1887.       USE.DEVICE.DRIVER$ = ""
  1888.       GOTO 16176
  1889. 16180 CALL GETYESNO ("Use the SHELL command to invoke protocol drivers?",GO.TO.SHELL$)
  1890.       IF GO.TO.SHELL$ = "YES" THEN _
  1891.          GO.TO.SHELL$ = "SHELL" : _
  1892.          RETURN
  1893.       IF GO.TO.SHELL$ = "NO" THEN _
  1894.          GO.TO.SHELL$ = "EXIT RBBS-PC"
  1895.       RETURN
  1896. 16290 CALL GETNUMYN ("Is the 'door' subsystem available?",DOORS.AVAILABLE)
  1897.       IF NOT DOORS.AVAILABLE THEN _
  1898.          RETURN
  1899.       CALL GETNUMYN ("Will you be running RBBS-PC under MultiLink? ",AB)
  1900.       IF AB THEN _
  1901.          GOTO 16350
  1902. 16340 DELAY! = FNTI! + 15
  1903. '
  1904. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS"
  1905. '
  1906.       CLS
  1907.       PRINT "                ******Warning******"
  1908.       PRINT "IBM's DOS absolutely REQUIRES any software package running"
  1909.       PRINT "as a 'door' (i.e. via a communication port) to monitor the"
  1910.       PRINT "communication port!  Unless the software that you invoke via
  1911.       PRINT "the RBBS-PC 'door' mechanism monitors the communication line,"
  1912.       PRINT "your system will be vulnerable to being hung -- and worse!!!"
  1913.       PRINT "If you don't THROUGHLY understand the section in RBBS-PC's"
  1914.       PRINT "documentation which discusses the pitfalls of opening RBBS-PC's"
  1915.       PRINT "'doors' to your users, DON'T use 'doors'!!!!!"
  1916. 16345 GOSUB 60440
  1917.       CLS
  1918.       PRINT "                ******Warning******"
  1919.       PRINT "Some environments require that you set the modem to answer"
  1920.       PRINT "on zero rings (i.e. 'auto-answer').  This is perilous to"
  1921.       PRINT "using doors because if a user in a door gets disconnected"
  1922.       PRINT "the modem is set to answer on the very next ring and someone who"
  1923.       PRINT "you may not want in the door or in DOS will find themselves"
  1924.       PRINT "able to do you grevious harm.  If you have this type of environ-"
  1925.       PRINT "ment and insist on using 'doors' or dropping to DOS remotely,"
  1926.       PRINT "you may now choose to shoot yourself in the foot (or any other"
  1927.       PRINT "part of the anatomy that is appropriate for such foolhardiness)."
  1928.       CALL GETNUMYN ("Do you want to shoot yourself in the foot",SHOOT.YOURSELF)
  1929.       RETURN
  1930. 16350 CLS
  1931. '
  1932. ' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC UNDER MULTI-LINK
  1933. '
  1934.       PRINT "Multi-Link is a software product of The Software Link, Inc. located"
  1935.       PRINT "at 8601 Dunwoody Place, Suite 632, Atlanta, Georgia  30338.  It allows"
  1936.       PRINT "IBM's DOS 2.x, or 3.x on the IBM PC to become a multi-tasking operating"
  1937.       PRINT "system.  The Capital PC User Group has no connection whatsoever with"
  1938.       PRINT "this company or it's products.  In fact The Software Link has only"
  1939.       PRINT "occasionally sent updates of it's new releases to me.  RBBS-PC has"
  1940.       PRINT "only been tested under Release 3.02 of MultiLink and earlier versions
  1941.       PRINT "of MultiLink.  I feel strongly that IBM's DOS for the PC should be"
  1942.       PRINT "multi-tasking.  Because MultiLink provides this capability for the widest
  1943.       PRINT "ranges of DOS software for the IBM PC, RBBS-PC has been enhanced"
  1944.       PRINT "to run under Multi-Link.  Any questions regarding RBBS-PC under Multi-Link"
  1945.       PRINT "(other than Release 3.02 of Multi-Link) should be directed to The
  1946.       PRINT "Software Link's customer support group at (404) 998-0788."
  1947.       PRINT ""
  1948.       PRINT "I have run RBBS-PC under Multi-Link since December 1983 -- since Multi-Link"
  1949.       PRINT "release 2.04.  Since Multi-Link release 2.06 I HAVE NEVER HAD A SYSTEM CRASH
  1950.       PRINT "due to Multi-Link.  I think it is a quality product but a bit over-priced."
  1951.       PRINT "My opnion on Multi-Link's price reflects my prejudice that all PC software"
  1952.       PRINT "should be relatively inexpensive."
  1953.       PRINT ""
  1954.       PRINT SPC(60);"Tom Mack
  1955.       PRINT SPC(60);"May, 25, 1986"
  1956. 16360 LOCATE 23,1
  1957.       PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
  1958. 16370 CALL MMINTEGER ("Enter Multi-Link terminal type for DOORS ",0,12,DOORS.TERMINAL.TYPE)
  1959.       RETURN
  1960. 16650 CALL ANYINTEGER ("MAX # of minutes per day (0 = no limit)",MAX.PER.DAY)
  1961.       RETURN
  1962. 16690 CALL GETNUMYN ("Remind users of # uploads and downloads?",REMIND.FILE.TRANSFERS)
  1963.       RETURN
  1964. 16722 CALL GETNUMYN ("Remind users of their terminal's profile?",REMIND.PROFILE)
  1965.       RETURN
  1966. 16725 CALL GETNUMYN ("Are you using a non-Hayes auto-answer only modem?",DUMB.MODEM)
  1967.       RETURN
  1968. 16730 CALL MMINTEGER ("Default user page length?(a value between 0 and 255)",0,255,PAGE.LENGTH)
  1969.       RETURN
  1970. 16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
  1971.       RETURN
  1972. 16795 CALL MMINTEGER ("Max. # of lines allowed in extended upload description (0-99)",0,99,MAX.EXTENDED.LINES)
  1973.       RETURN
  1974. 17160 CALL ANYINTEGER ("Security level for parameter " + _
  1975.                         HJ$ + _
  1976.                        " is? ",MINIMUM.LOGON.SECURITY)
  1977.       RETURN
  1978. 17170 CALL ANYINTEGER ("Security level for parameter " + _
  1979.                         HJ$ + _
  1980.                        " is? ",DEFAULT.SECURITY.LEVEL)
  1981.       RETURN
  1982. 17180 CALL ANYINTEGER ("Security level for parameter " + _
  1983.                         HJ$ + _
  1984.                        " is? ",SYSOP.SECURITY.LEVEL )
  1985.       RETURN
  1986. '
  1987. ' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY
  1988. '
  1989. 17190 GOSUB 17340
  1990.       FILESEC.FILE$ = HJ$
  1991.       RETURN
  1992. 17200 CALL ANYINTEGER ("Security level for parameter " + _
  1993.                         HJ$ + _
  1994.                        " is? ",SYSOP.MENU.SECURITY.LEVEL)
  1995.       RETURN
  1996. 17210 CALL ANYINTEGER ("MIN security required to add extended upload description",ASK.EXTENDED.DESC)
  1997.       RETURN
  1998. 17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
  1999.       RETURN
  2000. 17230 CALL SECURE ("SYSOP",SYSOP.COMMANDS.DEFAULTS$,NUM.SYSOP,SYSOP.FUNCTION$(),SYSOP.FUNCTION(),SYSOP.COMMANDS$)
  2001.       RETURN
  2002. 17240 CALL SECURE ("Main Menu",MAIN.COMMANDS.DEFAULTS$,NUM.MAIN,MAIN.FUNCTION$(),MAIN.FUNCTION(),MAIN.COMMANDS$)
  2003.       RETURN
  2004. 17250 CALL SECURE ("File Menu",FILE.COMMANDS.DEFAULTS$,NUM.FILES,FILES.FUNCTION$(),FILES.FUNCTION(),FILE.COMMANDS$)
  2005.       RETURN
  2006. 17260 CALL SECURE ("Utilities",UTIL.COMMANDS.DEFAULTS$,NUM.UTILITY,UTILITY.FUNCTION$(),UTILITY.FUNCTION(),UTIL.COMMANDS$)
  2007.       RETURN
  2008. 17264 CALL SECURE ("Global",GLOBAL.COMMANDS.DEFAULTS$,NUM.GLOBAL,GLOBAL.FUNCTION$(),GLOBAL.FUNCTION(),GLOBAL.COMMANDS$)
  2009.       RETURN
  2010. '
  2011. ' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES
  2012. '
  2013. 17270 GOSUB 17340
  2014.       PASSWORD.FILE$ = HJ$
  2015.       RETURN
  2016. 17280 CALL ASKRO("Name of file shown for security breaches",24,HJ$)
  2017.       IF LEN(HJ$) > 8 OR INSTR(HJ$,".") > 0 THEN _
  2018.          GOTO 17280
  2019.       IF LEN(HJ$) < 1 THEN _
  2020.          SECVIO.HLP$ = NONE.PICKED$ : _
  2021.          RETURN
  2022.       CALL ALLCAPS (HJ$)
  2023.       SECVIO.HLP$ = HELP.PATH$ + HJ$ + "." + HELP.EXTENSION$
  2024.       RETURN
  2025. 17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
  2026.       RETURN
  2027. 17300 CALL ANYINTEGER ("Security level for parameter " + _
  2028.                         HJ$ + _
  2029.                        " is? ",MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  2030.       RETURN
  2031. 17310 CALL ANYINTEGER ("Security level for overwriting files on upload is? ",OVERWRITE.SECURITY.LEVEL)
  2032.       RETURN
  2033. 17316 CALL ANYINTEGER ("Security level for parameter " + _
  2034.                         HJ$ + _
  2035.                        " is? ",SEC.LVL.EXEMPT.FRM.PURGING)
  2036.       RETURN
  2037. '
  2038. ' *  STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION
  2039. '
  2040. 17340 GOSUB 15200
  2041.       GOSUB 14970
  2042.       IF IPAGE = 6 AND ILOOKUP = 9 AND HJ$ = "NONE" THEN _
  2043.       IF MID$(HJ$,2,1) <> ":" THEN _
  2044.          BEEP : _
  2045.          GOTO 17340
  2046.       IF HJ$ = "NONE" THEN _
  2047.          RETURN
  2048.       HJ$ = TB$ + HJ$
  2049.       RETURN
  2050. 17500 CALL GETNUMYN ("Show section in command prompt",SHOW.SECTION)
  2051.       RETURN
  2052. 17550 CALL GETNUMYN ("Show commands in command prompt",COMMANDS.IN.PROMPT)
  2053.       RETURN
  2054. 17560 CALL GETNUMYN ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS)
  2055.       RETURN
  2056. 17570 CALL GETNUMYN ("Add new users to USERS file",REMEMBER.NEW.USERS)
  2057.       RETURN
  2058. 17580 CALL GETNUMYN ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM)
  2059.       RETURN
  2060. 17590 CALL GETNUMYN ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS)
  2061.       RETURN
  2062. 17600 CALL GETNUMYN ("Enable download of new files at logon",NEW.FILES.CHECK)
  2063.       RETURN
  2064. 17610 CALL GETNUMYN ("Turn printer off after each recycle",TURN.PRINTER.OFF)
  2065.       RETURN
  2066. 17620 CALL GETNUMYN ("Play music themes for RBBS functions",MUSIC)
  2067.       RETURN
  2068. 17625 CALL GETNUMYN ("Use order on directory of directories (no=sort)",USE.DIR.ORDER)
  2069.       RETURN
  2070. 17630 CALL GETNUMYN ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE)
  2071.       RETURN
  2072. 17645 CALL GETNUMYN ("Send multi-file ASCII download as one big file",PERSONAL.CONCAT)
  2073.       RETURN
  2074. 17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
  2075.       RETURN
  2076. 17700 CALL GETNUMYN ("Require all callers to answer a questionnaire",AB)
  2077.       IF NOT AB THEN _
  2078.          REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ : _
  2079.          RETURN
  2080.       GOSUB 17340
  2081.       GOSUB 17740
  2082.       REQUIRED.QUESTIONNAIRE$ = HJ$
  2083.       RETURN
  2084. 17710 GOSUB 17340
  2085.       PRELOG$ = HJ$
  2086.       RETURN
  2087. 17720 GOSUB 17340
  2088.       GOSUB 17740
  2089.       NEW.USER.QUESTIONNAIRE$ = HJ$
  2090.       RETURN
  2091. 17725 GOSUB 17340
  2092.       GOSUB 17740
  2093.       AUTOPAGE.DEF$ = HJ$
  2094.       RETURN
  2095. 17730 GOSUB 17340
  2096.       GOSUB 17740
  2097.       EPILOG$ = HJ$
  2098.       RETURN
  2099. 17740 IF INSTR(HJ$,".") = 0 THEN _
  2100.          HJ$ = HJ$ + ".DEF"
  2101.       RETURN
  2102. 17800 CALL MMINTEGER ("Match personal downloads starting at what column in user record",1,128,PERSONAL.BEGIN)
  2103.       RETURN
  2104. 17805 OK = TRUE
  2105.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2106.          RETURN
  2107.       IF START.WRITE > 100 THEN _
  2108.          RETURN
  2109.       IF START.WRITE < 82 AND _
  2110.          START.WRITE + LEN.WRITE < 82 THEN _
  2111.          RETURN
  2112.       OK = FALSE
  2113. 17806 CALL ASKRO ("Parameter 47 precludes using this part of USERS record. [ENTER] continues",24,A$)
  2114.       RETURN
  2115. 17810 CALL MMINTEGER ("Match personal downloads using how many chars in user record",1,128,PERSONAL.LEN)
  2116.       RETURN
  2117. 17820 CALL ASKRO ("Protocol for personal downloads (A,X,C,K,Y,I,G [ENTER] for none)",24,PERSONAL.PROTOCOL$)
  2118.       IF LEN(PERSONAL.PROTOCOL$) > 1 THEN _
  2119.          GOTO 17820
  2120.       IF PERSONAL.PROTOCOL$ = "" THEN _
  2121.          PERSONAL.PROTOCOL$ = "N"
  2122.       CALL ALLCAPS (PERSONAL.PROTOCOL$)
  2123.       IF INSTR("AXCKYIGN",PERSONAL.PROTOCOL$) = 0 THEN _
  2124.          GOTO 17820
  2125.       RETURN
  2126. 17830 CALL ASKRO ("Prompt for first field caller asked (What is your..)",24,FIRST.NAME.PROMPT$)
  2127.       RETURN
  2128. 17840 CALL ASKRO ("Prompt for second field caller asked (What is your..)",24,LAST.NAME.PROMPT$)
  2129.       RETURN
  2130. 17845 CALL ASKRO ("Ask callers for [e.g. CITY/STATE] (What is your...)",24,USER.LOCATION$)
  2131.       RETURN
  2132. 17850 CALL GETNUMYN ("Enforce upload/download ratios",ENFORCE.UPLOAD.DOWNLOAD.RATIOS)
  2133.       IF NOT ENFORCE.UPLOAD.DOWNLOAD.RATIOS THEN _
  2134.          RETURN
  2135.       IF START.INDIV > 100 THEN _
  2136.          RETURN
  2137.       IF START.INDIV < 82 AND _
  2138.          START.INDIV + LEN.INDIV < 82 THEN _
  2139.          RETURN
  2140.       ENFORCE.UPLOAD.DOWNLOAD.RATIOS = FALSE
  2141.       GOTO 17806
  2142. 18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
  2143.                     START.HASH,LEN.HASH,PROMPT.HASH$)
  2144. 18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
  2145.         BEEP : _
  2146.         GOTO 18000
  2147.       IF START.HASH = 1 THEN _
  2148.          HASH.ID$ = "(NAME)"_
  2149.       ELSE HASH.ID$ = "(nonstandard)"
  2150.       START.WRITE = START.HASH
  2151.       LEN.WRITE = LEN.HASH
  2152.       GOSUB 17805
  2153.       IF NOT OK THEN _
  2154.          START.HASH = 1 : _
  2155.          LEN.HASH = 31 : _
  2156.          GOTO 18002
  2157.       RETURN
  2158. 18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
  2159.                     START.INDIV,LEN.INDIV,PROMPT.INDIV$)
  2160. 18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
  2161.         INDIV.ID$ = NONE.PICKED$ _
  2162.       ELSE INDIV.ID$ = "(nonstandard)"
  2163.       START.WRITE = START.INDIV
  2164.       START.LEN = LEN.INDIV
  2165.       GOSUB 17805
  2166.       IF NOT OK THEN _
  2167.          START.INDIV = 0 : _
  2168.          LEN.INDIV = 31 : _
  2169.          GOTO 18102
  2170.       START.WRITE = START.INDIV
  2171.       RETURN
  2172. 18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
  2173.       CALL ALLCAPS (DEFAULT.CATEGORY.CODE$)
  2174.       IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
  2175.          DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
  2176.       ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
  2177.                                     SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
  2178.       RETURN
  2179. 18300 GOSUB 15200
  2180.       CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
  2181.       DIR.CATEGORY.FILE$ = TB$ + _
  2182.                            DIR.CATEGORY.FILE$
  2183.       RETURN
  2184. 18310 GOSUB 17340
  2185.       MAIN.PUI$ = HJ$
  2186.       CALL BRKFNAME (MAIN.PUI$,X1$,X2$,X3$,TRUE)
  2187.       IF X3$ = "" THEN _
  2188.          MAIN.PUI$ = X1$ + X2$ + ".PUI"
  2189.       RETURN
  2190. 18330 CALL GETNUMYN ("Should DOORS be TIME-LOCKED",TIME.LOCK)
  2191.       CALL GETNUMYN ("Should DOWNLOADS be TIME-LOCKED",Q)
  2192.       TIME.LOCK = -TIME.LOCK + 2 * -Q
  2193.       RETURN
  2194. 18340 CALL ANYINTEGER ("MINIMUM security for turbo logon",ALLOW.CALLER.TURBO)
  2195.       RETURN
  2196. 18345 CALL ANYINTEGER ("MINIMUM security to add dir entry for pre-existing file",ADD.DIR.SECURITY) 
  2197.       RETURN
  2198. 18350 CALL ASKRO ("Copy upload description to (Drive/path/name)",24,ALWAYS.STREW.TO$)
  2199.       CALL ALLCAPS (ALWAYS.STREW.TO$)
  2200.       RETURN
  2201. 18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
  2202.       CALL ALLCAPS (MASTER.DIRECTORY.NAME$)
  2203.       RETURN
  2204. 18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
  2205.       RETURN
  2206. 18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
  2207.       RETURN
  2208. 18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
  2209.       RETURN
  2210. 18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
  2211.       RETURN
  2212. 18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
  2213.       RETURN
  2214. 18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
  2215.       RETURN
  2216. 18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
  2217.       RETURN
  2218. 18545 IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  2219.          XX$ = "Parameter " + _
  2220.             OPTION$ + _
  2221.             " only valid during CONFERENCE maintenence!" : _
  2222.          GOSUB 50345 : _
  2223.          DELAY! = FNTI! + 5 : _
  2224.          GOSUB 60440 : _
  2225.          RETURN
  2226.       CALL ANYINTEGER ("Minimum security level to 'AUTO ADD' to conference",AUTO.ADD.SECURITY)
  2227.       AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  2228.       RETURN
  2229. '
  2230. ' *  GET UPLOAD DIRECTORY DRIVE/PATH
  2231. '
  2232. 18550 GOSUB 15200
  2233.       UPLOAD.PATH$ = HJ$
  2234.       RETURN
  2235. 18600 GOSUB 15200
  2236.       DIRECTORY.PATH$ = HJ$
  2237.       RETURN
  2238. 18620 GOSUB 17340
  2239.       PROTO.DEF$ = HJ$
  2240.       RETURN
  2241. 18630 GOSUB 15200
  2242.       PERSONAL.DRVPATH$ = HJ$
  2243.       RETURN
  2244. 18640 CALL GETNUMYN ("Is there an external program to check new users",AB)
  2245.       IF NOT AB THEN _
  2246.          REGISTRATION.PROGRAM$ = NONE.PICKED$ : _
  2247.          RETURN
  2248.       GOSUB 17340
  2249.       REGISTRATION.PROGRAM$ = HJ$
  2250.       RETURN
  2251. 18700 CALL GETNUMYN ("Set most critical parameters",AB)
  2252.       IF NOT AB THEN _
  2253.          RETURN
  2254.       HJ$ = CHR$(13)
  2255. '
  2256. ' * SET THE MOST CRITICAL PARAMETERS
  2257. ' *  12 = name of board
  2258. ' *  29 = type pc
  2259. ' * 162 = environment
  2260. ' * 161 = max # nodes
  2261. ' * 123 = min sec logon
  2262. ' * 124 = default security
  2263. ' *   8 = max sess time
  2264. ' *   9 = max day time
  2265. ' * 221 = comm port
  2266. ' * 224 = ring to answer
  2267. ' * 228 = baud rate
  2268. ' * 121 = remote sysop name
  2269. '
  2270.      KSTACKED$ =   "8" + HJ$ +   "9" + HJ$ + _
  2271.                   "12" + HJ$ +  "29" + HJ$ + _
  2272.                  "121" + HJ$ + "123" + HJ$
  2273.      KSTACKED$ = KSTACKED$ + _
  2274.                  "124" + HJ$ + "161" + HJ$ + _
  2275.                  "162" + HJ$ + "221" + HJ$ + _
  2276.                  "224" + HJ$ + "228" + HJ$
  2277.      IX = 1
  2278.      RETURN
  2279. 18800 CALL GETNUMYN ("Set the Parameters new in " + CONFIG.VERSION$,AB)
  2280.       IF NOT AB THEN _
  2281.          RETURN
  2282.       HJ$ = CHR$(13)
  2283. '
  2284. ' * SET THE PARAMETERS NEW TO THIS RELEASE OF RBBS-PC
  2285. ' *  17 = SMART TEXT CONTROL CHARACTER
  2286. ' *  18 = AUTOPAGE FILE NAME
  2287. ' *  19 = PERSONAL MAIL NOTIFICATION LEVEL
  2288. ' *  40 = MAXIMUM NUMBER OF LINES IN EXTENDED DESCRIPTION
  2289. ' *  58 = SHOW ALL DIRECTORIES IN SORTED ORDER
  2290. ' *  59 = BUFFER SIZE TO WRITE OUT UPLOADS
  2291. ' *  79 = DRIVE/PATH WHERE MACROS ARE STORED
  2292. ' *  80 = FILE EXTENSION TO USE FOR MACROS
  2293. ' *  93 = FILE TO CONTROL NOTIFICATION OF CONFERENCE MAIL
  2294. ' * 122 = ALLOW LOCAL SYSOP TO LOGON WITHOUT ENTERING PASSWORD
  2295. ' * 127 = MINIMUM SECURITY CALLER MUST HAVE TO LEAVE EXTENDED DESCRIPTIONS
  2296. ' * 153 = MINIMUM SECURITY TO ADD DIRECTORY ENTRY FOR EXISTING FILE
  2297. ' * 154 = HELP FILE DISPLAYED TO CALLERS THAT VIOLATE SECURITY
  2298. ' * 155 = TIME LOCK ON DOORS AND DOWNLOADS
  2299. ' * 215 = LIMIT FILE SEARCHES TO FMS DIRECTORY ONLY
  2300. ' * 218 = LIMIT SEARCH FOR "ALL" TO CURRENT DIRECTORY
  2301. ' * 233 = FILE WITH PROTOCOL DEFINITIONS
  2302. ' * 246 = MAXIMUM TIME TO WAIT FOR CARRIER AFTER ANSWERING PHONE
  2303. ' * 321 ---+
  2304. ' * 322    |
  2305. ' * 323    |
  2306. ' * 324    +---- PARAMETERS FOR RBBS-PC COLORIZATION
  2307. ' * 325    |
  2308. ' * 326    |
  2309. ' * 327----+
  2310. '
  2311.       KSTACKED$ =    "17" + HJ$ +  "18" + HJ$ +  "19" + HJ$ +  "93" + HJ$ + _
  2312.                     "155" + HJ$ + "246" + HJ$
  2313.       KSTACKED$ = KSTACKED$ + _
  2314.                      "40" + HJ$ + "127" + HJ$ + "153" + HJ$
  2315.       KSTACKED$ = KSTACKED$ + _
  2316.                      "58" + HJ$ + "215" + HJ$ + "218" + HJ$
  2317.       KSTACKED$ = KSTACKED$ + _
  2318.                     "233" + HJ$ +  "59" + HJ$
  2319.       KSTACKED$ = KSTACKED$ + _
  2320.                      "79" + HJ$ +  "80" + HJ$
  2321.       KSTACKED$ = KSTACKED$ + _
  2322.                     "122" + HJ$ + "154" + HJ$
  2323.       KSTACKED$ = KSTACKED$ + _
  2324.                     "321" + HJ$ + "322" + HJ$ + "323" + HJ$
  2325.       KSTACKED$ = KSTACKED$ + _
  2326.                     "324" + HJ$ + "325" + HJ$ + "326" + HJ$ + "327" + HJ$ + _
  2327.                     "END"
  2328.       IPAGE = 1
  2329.       RETURN
  2330. '
  2331. ' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE
  2332. '
  2333. 19189 IF CONFERENCE.MODE = 2 THEN _
  2334.          GOSUB 22560 : _
  2335.          RETURN
  2336.       GOSUB 22100
  2337.       RETURN
  2338. '
  2339. ' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR
  2340. '
  2341. 20000 LOCATE 18,1
  2342.       PRINT "NOTE:  PC-SIG believes that it is illegal to charge users for"
  2343.       PRINT "       downloading from the PC-SIG Library on a per download"
  2344.       PRINT "       basis.  Subscription fees of a reasonable nature are"
  2345.       PRINT "       acceptable."
  2346.       A$ = "Specify Library disk in the range A->" + M$ + "(or NONE) "
  2347.       MAX = 4
  2348.       GOSUB 13599
  2349.       LIBRARY.DRIVE$ = HJ$
  2350.       IF LEN(HJ$) > 1 AND HJ$ <> "NONE" THEN _
  2351.          GOTO 20000
  2352.       IF LIBRARY.DRIVE$ = "NONE" THEN _
  2353.          LIBRARY.DRIVE$ = "" _
  2354.       ELSE LIBRARY.DRIVE$ = LIBRARY.DRIVE$ + ":"
  2355.       RETURN
  2356. '
  2357. ' * LIBRARY DIRECTORY/PATH
  2358. '
  2359. 20010 GOSUB 15200
  2360.       LIBRARY.DIRECTORY.PATH$ = HJ$
  2361.       RETURN
  2362. '
  2363. ' *  NAME OF 'LIBRARY DIRECTORY' FILE'S EXTENSION
  2364. '
  2365. 20020 A$ = "Name of Library directory extension "
  2366.       GOSUB 13593
  2367.       LIBRARY.DIRECTORY.EXTENTION$ = HJ$
  2368.       RETURN
  2369. '
  2370. ' * LIBRARY WORKING DISK
  2371. '
  2372. 20030 GOSUB 15200
  2373.       LIBRARY.WORK.DISK.PATH$ = HJ$
  2374.       RETURN
  2375. 20040 CALL MMINTEGER ("Max number of disks on Library (1-9999)",1,9999,LIBRARY.MAX.DISK)
  2376.       RETURN
  2377. 20050 CALL MMINTEGER ("Max number of directories on Library (1-999)",1,999,LIBRARY.MAX.DIRECTORY)
  2378.       RETURN
  2379. 20060 CALL MMINTEGER ("Number of subdirectories for each master (1-999)",1,999,LIBRARY.MAX.SUBDIR)
  2380.       RETURN
  2381. '
  2382. ' * PREFIX OF LIBRARY SUBDIRECTORY
  2383. '
  2384. 20070 A$ = "Prefix name of Library subdirectories in each master "
  2385.       MAX = 4
  2386.       GOSUB 13599
  2387.       LIBRARY.SUBDIR.PREFIX$ = HJ$
  2388.       RETURN
  2389. '
  2390. ' *  NAME OF FILE SUBSECTION'S MENU
  2391. '
  2392. 20080 GOSUB 17340
  2393.       MENU$(6) = HJ$
  2394.       RETURN
  2395. '
  2396. ' *  ASSIGN SECURITY LEVELS TO THE LIBRARY MENU'S COMMANDS
  2397. '
  2398. 20090 CALL SECURE ("LIBRARY",LIBRARY.COMMANDS.DEFAULTS$,NUM.LIBRARY,LIBRARY.FUNCTION$(),LIBRARY.FUNCTION(),LIBRARY.COMMANDS$)
  2399.       RETURN
  2400. '
  2401. ' * DRIVE/PATH FOR ARCHIVE UTILITY
  2402. '
  2403. 20100 GOSUB 15200
  2404.       LIBRARY.ARCHIVE.PATH$ = HJ$
  2405.       RETURN
  2406. '
  2407. ' * PROCESS NAME OF ARCHIVE UTILITY
  2408. '
  2409. 20110 CALL ASKRO ("Name of Archive utility ",24,HJ$)
  2410.       CALL ALLCAPS (HJ$)
  2411.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2412.          GOTO 20110
  2413.       LIBRARY.ARCHIVE.PROGRAM$ = HJ$
  2414.       CALL ASKRO ("Archive command ",24,HJ$)
  2415.       CALL ALLCAPS (HJ$)
  2416.       IF LEN(HJ$) > 8 THEN _
  2417.          GOTO 20110
  2418.       LIBRARY.ARCHIVE.PROGRAM$ = LIBRARY.ARCHIVE.PROGRAM$ + _
  2419.                                  " " + _
  2420.                                  HJ$
  2421.       RETURN
  2422. 21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
  2423.       IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
  2424.          RETURN
  2425.       B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
  2426.       GOSUB 30610
  2427.       RETURN
  2428. 21760 CALL MMINTEGER ("Size of internal BUFFER for text files (32-4096)",32,4096,BUFFER.SIZE)
  2429.       RETURN
  2430. 21770 CALL MMINTEGER ("Size of internal BUFFER for Uploads (128-8192)",128,8192,WRITE.BUF.DEF)
  2431.       RETURN
  2432. '
  2433. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN
  2434. '
  2435. 21810 SUBROUTINE.PARAMETER = 1
  2436. 21820 CALL NETTYPE
  2437.       RETURN
  2438. 21895 SUBROUTINE.PARAMETER = 2
  2439.       GOTO 21820
  2440. '
  2441. ' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE
  2442. '
  2443. 21910 IF CONFERENCE.MODE = 2 THEN _
  2444.          GOSUB 22560 : _
  2445.          RETURN
  2446.       GOSUB 22100
  2447.       RETURN
  2448. '
  2449. ' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF
  2450. '
  2451. 21950 CALL ASKRO ("How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? ",24,HJ$)
  2452.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
  2453.          GOTO 21950
  2454.       CALL ALLCAPS (HJ$)
  2455.       IF LEFT$(HJ$,1) = "S" THEN _
  2456.          HJ$ = "SYSTEM" : _
  2457.          RECYCLE.TO.DOS = 1 : _
  2458.          GOTO 22020
  2459.       IF LEFT$(HJ$,1) = "I" THEN _
  2460.          HJ$ = "INTERNAL" : _
  2461.          RECYCLE.TO.DOS = 0 : _
  2462.          GOTO 22020
  2463.       GOTO 21950
  2464. 22020 RECYCLE.TO.DOS$ = HJ$
  2465.       RETURN
  2466. '
  2467. ' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE
  2468. '
  2469. 22040 CALL ANYNUMBER ("Max. records in preformatted " + _
  2470.                        MAIN.MESSAGE.FILE$ + _
  2471.                       " file (>" + _
  2472.                        STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):",B3!)
  2473.       IF B3! <= (5 * MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
  2474.          B3! > 9999999! THEN _
  2475.          GOTO 22040
  2476. 22080 B1 = MAXIMUM.NUMBER.OF.NODES
  2477.       GOSUB 30610
  2478.       MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
  2479.       RETURN
  2480. '
  2481. ' * BUILD THE USERS FILE TO SUIT
  2482. '
  2483. 22100 FF = CURRENT.USER.COUNT
  2484.       IF FF > 1 THEN _
  2485.          FF = FF - 1
  2486.       CALL ANYINTEGER (STR$(FF) + _
  2487.                        " of" + _
  2488.                        STR$(HIGHEST.USER.RECORD) + _
  2489.                        " records used. Enter new max # of records for " + _
  2490.                        MAIN.USER.FILE$ + _
  2491.                        ":",B1)
  2492. 22120 IF B1 < 1 OR B1 > 99999! OR _
  2493.          B1 < FF THEN _
  2494.          GOTO 22100
  2495. 22140 B2 = 2
  2496.       WHILE B2 < B1
  2497.         B2 = B2 * 2
  2498.       WEND
  2499.       IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
  2500.          RETURN
  2501.       CALL GETNUMYN ("Change " + _
  2502.                       MAIN.USER.FILE$ + _
  2503.                      " file to" + _
  2504.                       STR$(B2) + _
  2505.                      " records?",AB)
  2506.       IF NOT AB THEN _
  2507.          GOTO 22100
  2508. 22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
  2509.       D.FLAG = -1
  2510.       GOSUB 24110
  2511.       IB = 1
  2512.       MAX.USR.FILE.SIZE.FRM.DEF = B2
  2513.       HIGHEST.USER.RECORD = B2
  2514.       GOSUB 30450
  2515.       RETURN
  2516. '
  2517. ' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA
  2518. '
  2519. 22340 LOCATE 22,1
  2520.       PRINT SPACE$(15) + _
  2521.             TIME$ + _
  2522.             " " + _
  2523.             SPACE$(64);
  2524.       LOCATE 22,35
  2525.       COLOR 0,7
  2526.       PRINT " Reading Data, Wait a sec !!! ";
  2527.       COLOR FG,BG,BORDER
  2528.       RETURN
  2529. '
  2530. ' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT
  2531. '
  2532. 22350 CALL ASKRO ("Are you satisfied with all changes? (Y/N) or <Q>uit ",24,HJ$)
  2533.       GOSUB 22380
  2534.       ON AB GOTO 12190,59000,60360,22350
  2535. 22380 IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
  2536.          GOTO 22470
  2537.       CALL ALLCAPS (HJ$)
  2538.       IF HJ$ = "NO" THEN _
  2539.          AB = 1 : _
  2540.          RETURN
  2541.       IF HJ$ = "N" THEN _
  2542.          HJ$ = "NO" : _
  2543.          AB = 1 : _
  2544.          RETURN
  2545.       IF HJ$ = "YES"  THEN _
  2546.          AB = 2 : _
  2547.          RETURN
  2548.       IF HJ$ = "Y" THEN _
  2549.          HJ$ = "YES" : _
  2550.          AB = 2 : _
  2551.          RETURN
  2552.       IF HJ$ = "QUIT" THEN _
  2553.          AB = 3 : _
  2554.          RETURN
  2555.       IF HJ$ = "Q" THEN _
  2556.          AB = 3 : _
  2557.          RETURN
  2558. 22470 AB = 4
  2559.       RETURN
  2560. '
  2561. ' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH
  2562. '
  2563. 22480 CALL MMINTEGER ("To which copy of RBBS-PC will these parameters apply (1 to 36)?",1,36,I)
  2564.       HJ$ = MID$(STR$(I),2)
  2565.       NODE.ID$ = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
  2566.       MID$(CONFIG.FILENAME$,5,1) = NODE.ID$
  2567.       RETURN
  2568. 22550 CALL ASKRO ("Parameter " + _
  2569.                    OPTION$ + _
  2570.                   " unavailable with CONFIG " + _
  2571.                    CONFIG.VERSION$ + _
  2572.                   "!  CR to continue",24,A$)
  2573.       RETURN
  2574. 22560 CALL ASKRO ("Parameter " + _
  2575.                    OPTION$ + _
  2576.                   " unavailable maintaining public conference! CR to continue",24,XX$)
  2577.       RETURN
  2578. '
  2579. ' * REBUILD THE USER FILE
  2580. '
  2581. 22570 A$ = "Rebuild the User File"
  2582.       GOSUB 22580
  2583.       IF CONFERENCE.MODE = 2 THEN _
  2584.          GOSUB 22560 : _
  2585.          RETURN
  2586.       D.FLAG = 0
  2587.       GOSUB 24110
  2588.       RETURN
  2589. '
  2590. ' * GENERAL CONFIRMATION OF RESPONSES
  2591. '
  2592. 22580 CALL GETNUMYN ("Really "+A$,AB)
  2593.       PRINT
  2594.       IF NOT AB THEN _
  2595.          RETURN 22582
  2596. 22582 RETURN
  2597. '
  2598. ' * PACK THE MESSAGES FILE
  2599. '
  2600. 23160 A$ = "Pack the Message File"
  2601.       GOSUB 22580
  2602.       B1 = MAXIMUM.NUMBER.OF.NODES
  2603.       B3! = HIGHEST.MESSAGE.RECORD
  2604.       PURGE = -1
  2605.       GOSUB 30610
  2606.       RETURN
  2607. '
  2608. ' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE
  2609. '
  2610. 23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
  2611.       RETURN
  2612. '
  2613. ' * REPAIR THE MESSAGES FILE
  2614. '
  2615. 23620 RB = 1
  2616.       A$ = "Repair Message File"
  2617.       GOSUB 22580
  2618. '
  2619. ' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE
  2620. '
  2621. 23630 SK = 0
  2622.       GOSUB 30040              ' <----Print message headers
  2623.       OPEN "R",1,MAIN.MESSAGE.FILE$
  2624.       FIELD 1,128 AS MESSAGE.RECORD$
  2625.       FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2626.          GET 1,I
  2627.          IF VAL(MID$(MESSAGE.RECORD$,117,4)) > 0 AND _
  2628.             SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
  2629.             SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
  2630.             GOSUB 23610 _
  2631.          ELSE GOTO 23725
  2632.          I$ = "K"
  2633.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  2634.             I$ = "A
  2635.          IF LOC(1) > NEXT.MESSAGE.RECORD - 1 THEN _
  2636.             GOTO 23730
  2637.          PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
  2638.                MID$(MESSAGE.RECORD$,76,25) + " " + _
  2639.                MID$(MESSAGE.RECORD$,101,15) + " " + _
  2640.                I$ + " " + _
  2641.                MID$(MESSAGE.RECORD$,117,4) + " " + _
  2642.                STR$(LOC(1)) + " "  + _
  2643.                STR$(I)
  2644.          SK = VAL(MID$(MESSAGE.RECORD$,2,4))
  2645.          IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
  2646.             GOTO 23730
  2647.          IF RB THEN _
  2648.             GOSUB 50580
  2649. 23725 NEXT
  2650. 23730 GET 1,1
  2651.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
  2652.       MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
  2653.       PUT 1,1
  2654.       CLOSE 1
  2655.       DELAY! = FNTI! + 5
  2656.       GOSUB 60440
  2657.       RETURN
  2658. '
  2659. ' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE
  2660. '
  2661. 23731 LOCATE 25,5
  2662.       COMPORT% = VAL(RIGHT$(COM.PORT$,1)) -1
  2663.       IF COMPORT% < 0 THEN _
  2664.          PRINT "COM port cannot be set while using COM0" : _
  2665.          DELAY! = FNTI! + 3 : _
  2666.          GOSUB 60440 : _
  2667.          RETURN _
  2668.       ELSE PRINT "Setting Hayes 2400 firmware switches for RBBS-PC on " + COM.PORT$;
  2669.       DELAY! = FNTI! + 3
  2670.       GOSUB 60440
  2671. '
  2672. ' *
  2673. ' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING:
  2674. ' *
  2675. ' *           &C1       = Indicate carrier detect if user is on-line
  2676. ' *           &D3       = Use these settings when DTR drops
  2677. ' *           B1        = Use Bell 212A when 1200 Baud is detected
  2678. ' *           E0        = Do not echo modem commands back to the PC
  2679. ' *           V1        = Issue long form of results codes
  2680. ' *           M0        = Disable the speaker
  2681. ' *
  2682. '
  2683. 23732 A$ = USER.INITIALIZE.COMMAND$
  2684.       IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=") + 3,3)) = 255 THEN _
  2685.          A$ = A$ + _
  2686.               "Q1"  ' Don't send results to the PC
  2687. 23734 IF NOT FOSSIL THEN _
  2688.          GOTO 23736
  2689.       CALL FOSINIT(COMPORT%,RESULT%)
  2690.       IF RESULT% = -1 THEN _
  2691.          LOCATE 25,1 : _
  2692.          PRINT "ERROR initializing FOSSIL.  FOSSIL deactivated." : _
  2693.          FOSSIL = FALSE : _
  2694.          GOTO 23736
  2695.       COMSPEED% = VAL(MODEM.INIT.BAUD$)
  2696.       PARITY% = 2                                          ' NO PARITY
  2697.       DATABITS% = 3                                        ' 8 DATA BITS
  2698.       STOPBITS% = 0                                        ' 1 STOP BIT
  2699.       CALL FOSSPEED(COMPORT%,COMSPEED%,PARITY%,DATABITS%,STOPBITS%)
  2700.       STATE% = 1
  2701.       CALL FOSDTR(COMPORT%,STATE%)
  2702.       BYTES% = LEN(FIRMWARE.CLEAR.CMND$)
  2703.       CALL FOSWRITE(COMPORT%,BYTES%,FIRMWARE.CLEAR.CMND$)
  2704.       DELAY! = FNTI! + 3
  2705.       GOSUB 60440
  2706.       BYTES% = LEN(USER.FIRMWARE.WRITE.CMND$)
  2707.       CALL FOSWRITE(COMPORT%,BYTES%,USER.FIRMWARE.WRITE.CMND$)
  2708.       DELAY! = FNTI! + 3
  2709.       GOSUB 60440
  2710.       STATE% = 0
  2711.       CALL FOSDTR(COMPORT%,STATE%)
  2712.       GOTO 23739
  2713. 23736 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
  2714.       PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
  2715.       DELAY! = FNTI! + 3
  2716.       GOSUB 60440
  2717.       PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
  2718.       GOSUB 60440
  2719. 23739 IF FOSSIL THEN _
  2720.          CALL FOSEXIT(COMPORT%) : _
  2721.       ELSE CLOSE #3
  2722.       LOCATE 25,5
  2723.       PRINT SPACE$(74);
  2724.       LOCATE 25,5
  2725.       PRINT "Modem's firmware set as specified in parameter 205 for " + M13$;
  2726.       DELAY! = FNTI! + 3
  2727.       GOSUB 60440
  2728.       RETURN
  2729. '
  2730. ' * ROUTINE TO RENUMBER THE MESSAGE FILE
  2731. '
  2732. 23740 A$ = "Renumber the Message File"
  2733.       GOSUB 22580
  2734.       GOSUB 30040
  2735. 23750 B1 = CALLS.TODATE!
  2736.       CALL GETINIT ("Renumber starting with OLD message # (<" + _
  2737.                      STR$(CALLS.TODATE! + 1) + _
  2738.                     ")",24,1,B1,RE,CR)
  2739.       IF CR THEN _
  2740.          RETURN
  2741. 23810 CALL GETINIT ("Renumber starting with NEW message # ",24,1,9999,NE,CR)
  2742.       IF CR THEN _
  2743.          RETURN
  2744.       NE = NE - 1
  2745.       OPEN "R",1,MAIN.MESSAGE.FILE$
  2746.       FIELD 1,128 AS MESSAGE.RECORD$
  2747.       FOR I  =  FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  2748.          GET 1,I
  2749.          IF INSTR(MESSAGE.RECORD$,CHR$(225)) OR _
  2750.             INSTR(MESSAGE.RECORD$,CHR$(226)) THEN _
  2751.             GOSUB 24010 : _
  2752.             GOSUB 23610
  2753.       NEXT
  2754.       GET 1,1
  2755.       MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
  2756.       MID$(MESSAGE.RECORD$,1,8) = STR$(NE)  ' 1- 8  =  number of last message on system
  2757.       PUT 1,1
  2758.       CLOSE 1
  2759.       GOSUB 23905
  2760.       DELAY! = FNTI! + 1
  2761.       GOSUB 60440
  2762.       RETURN
  2763. '
  2764. ' *  RESET LAST MESSAGE READ TO ZERO
  2765. '
  2766. 23900 A$ = "Zero out last message read for all users"
  2767.       GOSUB 22580
  2768. 23905 GOSUB 24020
  2769.       GOSUB 24025
  2770.       A! = HIGHEST.USER.RECORD
  2771.       XX$ = "Resetting Last Msg Read by User to 0.  Processing Record #"
  2772.       GOSUB 50345
  2773.       FOR J = 1 TO A!
  2774.          GET 1,J
  2775.          LOCATE 24,X
  2776.          PRINT J;
  2777.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2778.          LSET COMP.USER$ = HASH.VALUE$
  2779.          IF ASC(HASH.VALUE$) = 0 OR _
  2780.             COMP.USER$ = NEW.USER$ OR _
  2781.             COMP.USER$ = EMPTY.USER$ OR _
  2782.             COMP.USER$ = DELETED.USER$ THEN _
  2783.               GOTO 23955
  2784.          MID$(USER.OPTIONS$,3,2) = MKI$(0)  ' zero out last msg read
  2785.          PUT 1,J
  2786. 23955 NEXT
  2787.       CLOSE 1
  2788.       RETURN
  2789. 24010 LOCATE 24,15
  2790.       PRINT "Msg #" + MID$(MESSAGE.RECORD$,1,5);
  2791.       IF VAL(MID$(MESSAGE.RECORD$,2,4)) < RE THEN _
  2792.          PRINT " read"; : _
  2793.          RETURN
  2794.       Y$ = MID$(MESSAGE.RECORD$,1,1)
  2795.       MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
  2796.       NE = NE + 1
  2797.       MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
  2798.       MID$(MESSAGE.RECORD$,1,1) = Y$
  2799.       PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
  2800.       PUT 1,I
  2801.       RETURN
  2802. '
  2803. ' * ROUTINE TO PACK THE USERS FILE
  2804. '
  2805. 24020 OPEN "R",1,MAIN.USER.FILE$,128
  2806.       FIELD 1,  31 AS USER.NAME$, _
  2807.                 15 AS PASSWORD$, _
  2808.                  2 AS SECURITY.LEVEL$, _
  2809.                 14 AS USER.OPTIONS$, _
  2810.                 24 AS CITY.STATE$, _
  2811.                 19 AS MACHINE.TYPE$, _
  2812.                 14 AS LAST.DATE.TIME.ON$, _
  2813.                  3 AS LIST.NEW.DATE$, _
  2814.                  2 AS USER.DOWNLOADS$, _
  2815.                  2 AS USER.UPLOADS$, _
  2816.                  2 AS ELASPED.TIME$
  2817.       FIELD 1, 128 AS USER.RECORD$
  2818.       RETURN
  2819. '
  2820. ' *  SHARED ROUTINE TO SET UP USER PROCESSING
  2821. '
  2822. 24025 IF LEN.HASH < 7 THEN _
  2823.          NU = LEN.HASH _
  2824.       ELSE NU = 7
  2825.       NEW.USER$ = LEFT$("NEWUSER",NU)
  2826.       EMPTY.USER$ = SPACE$(NU)
  2827.       DELETED.USER$ = LEFT$("deleted user",NU)
  2828.       COMP.USER$ = EMPTY.USER$
  2829.       RETURN
  2830. 24040 CALL GETNUMYN ("Make Hilight if and only if color graphics selected",X)
  2831.       IF NOT X THEN _
  2832.          RETURN
  2833.       GOTO 24052
  2834. '
  2835. ' *  SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT
  2836. '
  2837. 24050 A$ = "Make all callers answer required questionnaire once"
  2838.       GOSUB 22580
  2839. 24052 GOSUB 24020
  2840.       GOSUB 24025
  2841.       A! = HIGHEST.USER.RECORD
  2842.       XX$ = "Processing Record #"
  2843.       GOSUB 50345
  2844.       FOR J = 1 TO A!
  2845.          GET 1,J
  2846.          LOCATE 24,X
  2847.          PRINT J;
  2848.          HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2849.          LSET COMP.USER$ = HASH.VALUE$
  2850.          IF ASC(HASH.VALUE$) = 0 OR _
  2851.             COMP.USER$ = NEW.USER$ OR _
  2852.             COMP.USER$ = EMPTY.USER$ OR _
  2853.             COMP.USER$ = DELETED.USER$ THEN _
  2854.               GOTO 24055
  2855.          USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
  2856.          IF ILOOKUP = 12 THEN _
  2857.             K = ((ASC(MID$(USER.OPTIONS$,6,1)) MOD 3) = 2) : _
  2858.             IF K THEN _
  2859.                USER.OPTIONS = USER.OPTIONS OR 1024 _ ' hilite
  2860.             ELSE USER.OPTIONS = USER.OPTIONS AND 1023 _ ' don't hilite
  2861.          ELSE USER.OPTIONS = USER.OPTIONS AND 1791 'Zero out Req Ques flag
  2862.          MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
  2863.          PUT 1,J
  2864. 24055 NEXT
  2865.       CLOSE 1
  2866.       RETURN
  2867. '
  2868. ' COMMON ROUTINE TO EXPAND OR CONTRACT THE USER FILE
  2869. '
  2870. 24110 GOSUB 30040
  2871.       IF NO.OLD.FILE THEN _
  2872.          GOTO 24111
  2873.       GOSUB 24020
  2874.       GOSUB 50350
  2875.       A$ = F$
  2876.       GOSUB 50095
  2877. 24111 OPEN "R",2,A$,128
  2878.       FIELD 2,  31 AS USER.NAME.N$, _
  2879.                 15 AS PASSWORD.N$, _
  2880.                  2 AS SECURITY.LEVEL.N$, _
  2881.                 14 AS USER.OPTIONS.N$, _
  2882.                 24 AS CITY.STATE.N$, _
  2883.                 19 AS MACHINE.TYPE.N$, _
  2884.                 14 AS LAST.DATE.TIME.ON.N$, _
  2885.                  3 AS LIST.NEW.DATE.N$, _
  2886.                  2 AS USER.DOWN.LOADS.N$, _
  2887.                  2 AS USER.UPLOADS.N$, _
  2888.                  2 AS ELAPSED.TIME.N$
  2889.       FIELD 2, 128 AS USER.RECORD.N$
  2890.       CURRENT.MONTH = VAL(LEFT$(DATE$,2)) + (VAL(RIGHT$(DATE$,2)) * 12)
  2891.       A! = 0
  2892.       GOSUB 50840
  2893.       CURRENT.USER.COUNT = 1
  2894.       IF NO.OLD.FILE THEN _
  2895.          HIGHEST.USER.RECORD = A! : _
  2896.          MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
  2897.          GOSUB 30450 : _
  2898.          RETURN
  2899.       A! = LOF(1) / 128.0!
  2900.       GOSUB 24025
  2901.       PURGED.COUNT = 0
  2902. 24112 FOR J  =  1 TO A!
  2903.          GET 1
  2904. 24114    HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
  2905.          LSET COMP.USER$ = HASH.VALUE$
  2906. 24116    MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2)) + _
  2907.                                (VAL(MID$(LAST.DATE.TIME.ON$,7,2)) * 12)
  2908.          MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH - MONTH.OF.LAST.LOGON
  2909.          IF COMP.USER$ = NEW.USER$ OR _
  2910.             COMP.USER$ = DELETED.USER$ THEN _
  2911.             A$ = "" : _
  2912.             GOTO 24430
  2913.          X = ASC(HASH.VALUE$)
  2914.          IF X = 0 OR _
  2915.             COMP.USER$ = EMPTY.USER$ THEN _
  2916.             GOTO 24450
  2917.          Y = 1
  2918. 24280    IF X < 32 OR X > 126 THEN _
  2919.             A$ = "Bad name" : _
  2920.             GOTO 24430
  2921.          IF Y < LEN.HASH THEN _
  2922.             Y = Y + 1 : _
  2923.             X = ASC(MID$(HASH.VALUE$,Y,1)) : _
  2924.             GOTO 24280
  2925.          IF D.FLAG THEN _
  2926.             GOTO 24290
  2927.          SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
  2928.          IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
  2929.             GOTO 24290                           ' copy users exempt from purges
  2930.          IF SECURITY.LEVEL < MINIMUM.LOGON.SECURITY THEN _
  2931.             GOTO 24290                                 ' copy "locked-out" users
  2932.          IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
  2933.             A$ = "(Last on " + LAST.DATE.TIME.ON$ + ") " + _
  2934.                  STR$(MONTHS.SINCE.LAST.LOGON) : _
  2935.             GOTO 24430                                     'Purge inactive users
  2936.          Y = 1
  2937. 24290    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " copied ... ";
  2938.          GOSUB 50720
  2939.          PRINT STR$(MONTHS.SINCE.LAST.LOGON)
  2940.          GOTO 24450
  2941. 24430    PRINT STR$(LOC(1)) ; ": " ; HASH.VALUE$ ; " ... purged " ; A$
  2942.          PURGED.COUNT = PURGED.COUNT + 1
  2943. 24450 NEXT
  2944.       CLOSE 1,2
  2945.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  2946.       GOSUB 30450
  2947. 24730 LOCATE 23,1
  2948.       PRINT PURGED.COUNT;" USERS PURGED"
  2949.       CALL GETNUMYN ("Delete the old " + _
  2950.                       MAIN.USER.FILE$ + _
  2951.                      " file?",AB)
  2952.       IF AB THEN _
  2953.          GOTO 24770
  2954. 24750 A$ = MAIN.USER.FILE$
  2955.       GOSUB 50096
  2956.       NAME MAIN.USER.FILE$ AS A$
  2957.       GOTO 24780
  2958. 24770 KILL MAIN.USER.FILE$
  2959. 24780 GOSUB 50350
  2960.       A$ = F$
  2961.       GOSUB 50095
  2962.       NAME A$ AS MAIN.USER.FILE$
  2963.       RETURN
  2964. 24790 CALL GETNUMYN ("Really check FMS directory",AB)
  2965.       IF NOT AB THEN _
  2966.          RETURN
  2967.       CALL CHKFMSDIR (DIRECTORY.PATH$ + FMS.DIRECTORY$ + "." + DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
  2968.       RETURN
  2969. '
  2970. ' * ROUTINE TO RESET ACTIVE PRINTERS FOR ALL NODES
  2971. '
  2972. 24795 CLOSE 2
  2973.       OPEN "R",2,MAIN.MESSAGE.FILE$
  2974.       FIELD 2,128 AS RR$
  2975.       FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
  2976.          GET 2,J!
  2977.          MID$(RR$,38,2) = " 0"
  2978.          PUT 2,J!
  2979.       NEXT
  2980.       CLOSE 2
  2981.       RETURN
  2982. '
  2983. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS
  2984. '
  2985. 24800 CLS
  2986.       I! = FRE(C$)
  2987.       COLOR 0,7,0
  2988.       LOCATE 1,10
  2989.       PRINT "RBBS-PC CPC17 Default Configuration " + CONFIG.VERSION$;
  2990.       IF CONFERENCE.MODE THEN _
  2991.          GOSUB 24970
  2992.       COLOR FG,BG,BORDER
  2993.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  2994.       RETURN
  2995. '
  2996. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS
  2997. '
  2998. 24970 LOCATE 2,1
  2999.       PRINT SPACE$(10)
  3000.       LOCATE 2,10
  3001.       A$ = "Private"
  3002.       IF CONFERENCE.MODE = 2 THEN _
  3003.          A$ = "Public"
  3004.       COLOR 31,0,0
  3005.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  3006.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF") - 1) + _
  3007.             ")";
  3008.       RETURN
  3009. '
  3010. ' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES
  3011. '
  3012. 25020 XX$ = "In file " + _
  3013.             MAIN.USER.FILE$ + _
  3014.             " " + _
  3015.             A$ + _
  3016.             " record"
  3017.       GOTO 25035
  3018. 25030 IF PURGE THEN _
  3019.          RETURN
  3020.       XX$ = A$ + _
  3021.             " file " + _
  3022.             MAIN.MESSAGE.FILE$ + _
  3023.             " record"
  3024. 25035 GOSUB 50345
  3025.       RETURN
  3026. '
  3027. ' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE
  3028. '
  3029. 25040 REFRESH = 0
  3030.       IF CONFERENCE.MODE = 0 THEN _
  3031.          GOTO 25050
  3032.       GOSUB 30100
  3033.       CALL GETNUMYN ("End conference maintenance?",AB)
  3034.       IF NOT AB THEN _
  3035.          GOTO 25050
  3036. 25044 MAIN.MESSAGE.FILE$ = MAINMSG$
  3037.       MAIN.USER.FILE$ = MAINUSR$
  3038.       REFRESH = 1
  3039.       RETURN
  3040. 25050 CALL ASKRO ("Enter the name of the conference (seven characters or less) ",24,HJ$)
  3041.       IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
  3042.          GOTO 25040
  3043.       CALL ALLCAPS (HJ$)
  3044.       CP$ = HJ$
  3045. 25090 CALL ASKRO ("Specify drive (A->" + _
  3046.                    M$ + _
  3047.                   ") containing this conference's files. ",24,HJ$)
  3048.       CALL ALLCAPS (HJ$)
  3049.       IF HJ$ < "A" OR HJ$ > M$ THEN _
  3050.          GOTO 25090
  3051.       CP$ = HJ$ + _
  3052.             ":" + _
  3053.             CP$
  3054.       MAIN.MESSAGE.FILE$ = CP$ + _
  3055.                            "M.DEF
  3056. 25142 CALL GETNUMYN ("Is this a private conference?",AB)
  3057.       IF AB THEN _
  3058.          GOTO 25160
  3059. 25144 CONFERENCE.MODE = 2
  3060.       GOTO 25170
  3061. 25160 CONFERENCE.MODE = 1
  3062.       UG = 0
  3063.       MAIN.USER.FILE$ = CP$ + _
  3064.                         "U.DEF"
  3065. 25170 REFRESH = 2
  3066.       RETURN
  3067. '
  3068. ' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES
  3069. '
  3070. 25380 CALL GETNUMYN ("Will you be using DOS sub-directories?",WILL.SUBDIRS.B.USED)
  3071.       IF WILL.SUBDIRS.B.USED THEN _
  3072.          RETURN
  3073.       UPLOAD.TO.SUBDIR = FALES
  3074.       DOWNLOAD.TO.SUBDIR = FALSE
  3075.       RETURN
  3076. 25420 CALL GETNUMYN ("Are uploads to a DOS sub-directory?",UPLOAD.TO.SUBDIR)
  3077.       RETURN
  3078. 25460 CALL GETNUMYN ("Are downloads from DOS sub-directories?",DOWNLOAD.TO.SUBDIR)
  3079.       RETURN
  3080. '
  3081. ' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF
  3082. '
  3083. 25495 IF NOT UPLOAD.TO.SUBDIR THEN _
  3084.          GOTO 25497
  3085.       A$ = "upload"
  3086.       CALL GETNUMYN ("Change upload DOS sub-directory?",AB)
  3087.       IF AB THEN _
  3088.          GOTO 25500
  3089. 25497 IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3090.          RETURN
  3091.       A$ = "download"
  3092.       CALL GETNUMYN ("Modify download DOS sub-directories?",AB)
  3093.       IF AB THEN _
  3094.          GOTO 25505
  3095. 25498 RETURN
  3096. 25500 IF UPLOAD.SUBDIR$ = "" THEN _
  3097.          GOTO 25502
  3098. 25501 LOCATE 23,5
  3099.       PRINT SPC(74)
  3100.       LOCATE 23,5
  3101.       PRINT "Current " + A$ + " DOS sub-directory name is " + UPLOAD.SUBDIR$;
  3102. 25502 GOSUB 25850
  3103.       IF LEN(HJ$) < 1 THEN _
  3104.          GOTO 25505
  3105.       IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
  3106.          SWAP UPLOAD.SUBDIR$,X$ : _
  3107.          IF X$ = "" THEN _
  3108.             GOTO 25501 _
  3109.          ELSE 25505
  3110.       GOTO 25502
  3111. 25505 IF A$="upload" THEN _
  3112.          GOTO 25497
  3113.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3114.          RETURN
  3115.       LOCATE 23,5
  3116.       PRINT SPC(74)
  3117.       LOCATE 23,5
  3118.       PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
  3119. 25510 CALL ASKRO ("L>ist, C>hange, A>dd, D>elete " + A$ +" DOS sub-directories? (CR ends) ",24,HJ$)
  3120.       CALL ALLCAPS (HJ$)
  3121.       IF LEN(HJ$) < 1 THEN _
  3122.          GOTO 25498
  3123.       IF LEN(HJ$) <> 1 THEN _
  3124.          GOTO 25505
  3125.       FF = INSTR("LCAD",HJ$)
  3126.       IF FF = 0 THEN _
  3127.          GOTO 25510
  3128.       IF DNLD.SUB = 0 AND FF <> 3 THEN _
  3129.          GOTO 25510
  3130.       ON FF GOSUB 25610,25670,25730,25670
  3131.       GOTO 25505
  3132. 25610 LAST = (DNLD.SUB/16) + 1
  3133.       INCR = 1
  3134.       FOR IX = 1 TO LAST
  3135.          GOSUB 24800
  3136.          LOCATE 4,1
  3137.          PRINT "DOS sub-directories from which downloads are done:";
  3138.          INDEX = 4
  3139.          FOR I = 1 TO 16
  3140.             LOCATE INDEX + I,1
  3141.             PRINT DNLD$(INCR);
  3142.             INCR = INCR + 1
  3143.             IF INCR > DNLD.SUB THEN _
  3144.                GOTO 25668
  3145.          NEXT
  3146. 25636    CALL GETNUMYN ("More",AB)
  3147.          IF NOT AB THEN _
  3148.             GOTO 25668
  3149. 25644 NEXT
  3150. 25668 RETURN
  3151. 25670 GOSUB 25850
  3152.       IF LEN(HJ$) < 1 THEN _
  3153.          RETURN
  3154.       GOSUB 26030
  3155.       A$ = " not found!"
  3156.       IF X$ = "" THEN _
  3157.          GOTO 25682
  3158.       FOR I = 1 TO DNLD.SUB
  3159.          IF X$ = DNLD$(I) THEN _
  3160.             GOTO 25698
  3161.       NEXT
  3162. 25682 CALL ASKRO (X$ + A$ + " (CR to continue)",24,HJ$)
  3163.       A$ = "download"
  3164.       RETURN
  3165. 25698 IF FF = 4 THEN _
  3166.          FOR X = I TO DNLD.SUB : _
  3167.             DNLD$(X) = DNLD$(X + 1) : _
  3168.          NEXT : _
  3169.          A$ = " deleted!" : _
  3170.          DNLD.SUB = DNLD.SUB - 1 : _
  3171.          GOTO 25682
  3172.       IF FF = 2 THEN _
  3173.          A$ = "download" : _
  3174.          NEXT.MESSAGE.RECORD = I : _
  3175.          GOSUB 25850 : _
  3176.          GOSUB 26030 : _
  3177.          SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
  3178.          A$ = " changed!" : _
  3179.          GOTO 25682
  3180. 25730 X$ = ""
  3181.       GOSUB 25850
  3182.       IF LEN(HJ$) < 1 THEN _
  3183.          RETURN
  3184.       FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3185.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
  3186.             GOTO 25735
  3187.       NEXT
  3188.       GOSUB 60380
  3189.       CALL ASKRO (X$ + " is not a drive eligible for downloading. (CR to continue)",24,HJ$)
  3190.       GOTO 25730
  3191. 25735 IF X$ = "" THEN _
  3192.          GOTO 25498
  3193.       DNLD.SUB = DNLD.SUB + 1
  3194.       DNLD$(DNLD.SUB) = X$
  3195.       RETURN
  3196. '
  3197. ' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY
  3198. '
  3199. 25850 CALL ASKRO ("Enter " + A$ + " DOS sub-directory name (CR to end). ",24,HJ$)
  3200.       CALL ALLCAPS (HJ$)
  3201.       IF LEN(HJ$) < 1 THEN _
  3202.          RETURN
  3203.       IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
  3204.          X$ = HJ$ : _
  3205.          RETURN
  3206.       IF INSTR(HJ$,":\") <> 2 THEN _
  3207.          GOTO 25850
  3208.       X$ = HJ$
  3209.       FOR I = 4 TO LEN(X$)
  3210.          Y = INSTR(I,X$,"\")
  3211.          IF Y = 0 THEN _
  3212.             L1 = LEN(X$) - I + 1 : _
  3213.             GOTO 25876
  3214.          IF Y <> 0 THEN _
  3215.             L1 = Y - I + 1 : _
  3216.             GOTO 25876
  3217.       NEXT
  3218. 25876 HJ$ = MID$(X$,I,L1)
  3219.       IF LEN(HJ$) > 12 THEN _
  3220.          GOTO 25850
  3221.       L1 = INSTR(HJ$,".")
  3222.       IF L1 = 0 THEN _
  3223.          IF LEN(HJ$) < 9 THEN _
  3224.             GOTO 25920 _
  3225.          ELSE GOTO 25850
  3226.       IF L1 > 9 THEN _
  3227.          GOTO 25850
  3228.       IF L1 < 2 THEN _
  3229.          GOTO 25850
  3230.       IF LEN(HJ$) - L1 > 3 THEN _
  3231.          GOTO 25850
  3232.       I = 0
  3233.       GOSUB 25920
  3234.       IF I = 0 THEN _
  3235.          RETURN
  3236.       GOTO 25850
  3237. 25920 FOR J = 1 TO LEN(HJ$)
  3238.          X = ASC(MID$(HJ$,J,1))
  3239.          IF (X > 63 AND X < 91) THEN _
  3240.             GOTO 26020
  3241.          IF (X > 47 AND X < 58) THEN _
  3242.             GOTO 26020
  3243.          IF (X = 33) THEN _
  3244.             GOTO 26020
  3245.          IF (X > 34 AND X < 42) THEN _
  3246.             GOTO 26020
  3247.          IF (X > 43 AND X < 47) THEN _
  3248.             GOTO 26020
  3249.          IF (X > 96 AND X < 124) THEN _
  3250.             GOTO 26020
  3251.          IF (X = 125) THEN _
  3252.             GOTO 26020
  3253.          I = 1
  3254.          RETURN
  3255. 26020 NEXT
  3256.       RETURN
  3257. '
  3258. ' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING
  3259. '
  3260. 26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
  3261.          IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
  3262.             RETURN
  3263.       NEXT
  3264.       X$ = ""
  3265.       RETURN
  3266. '
  3267. ' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS
  3268. '
  3269. 26040 CALL GETNUMYN ("Is RBBS-PC to drop to DOS at a specific time each day?",AB)
  3270.       TIME.TO.DROP.TO.DOS = 0
  3271.       IF AB THEN _
  3272.          GOTO 26060
  3273. 26050 GOTO 26065
  3274. 26060 CALL GETINIT ("Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No)",24,0,2359,TIME.TO.DROP.TO.DOS,CR)
  3275. 26065 RETURN
  3276. '
  3277. ' * IDENTIFY THE NET WORK MAIL TYPE THAT RBBS-PC IS RUNNING IN
  3278. '
  3279. 26070 CLS
  3280.       LOCATE 3,5
  3281.       PRINT "RBBS-PC supports the following store-and-forward mail systems:"
  3282.       LOCATE 5,20
  3283.       PRINT "Environment"
  3284.       LOCATE 7,10
  3285.       PRINT "0. None"
  3286.       LOCATE 9,10
  3287.       PRINT "1. SeaDog"
  3288.       LOCATE 11,10
  3289.       PRINT "2. Binkley Term"
  3290.       LOCATE 13,10
  3291.       PRINT "3. X.400 (to be supported in the future)"
  3292.       LOCATE 15,10
  3293.       PRINT "4. GTE's PC-Pursuit (to be supported in the future)"
  3294.       LOCATE 17,10
  3295.       PRINT "5. G.E.'s GENIE's QuikComm (to be supported in the future)"
  3296. 26080 CALL GETINIT ("Select network mail type (0 to 5, CR to end)",24,0,5,AB,CR)
  3297.       NET.MAIL$ = "<none>"
  3298.       IF AB = 1 THEN _
  3299.          NET.MAIL$ = "SeaDog"
  3300.       IF AB = 2 THEN _
  3301.          NET.MAIL$ = "BINKLEY TERM"
  3302.       RETURN
  3303. 26100 CALL GETASCII ("Turn Echo On",HOST.ECHO.ON$)
  3304.       RETURN
  3305. 26105 CALL GETASCII ("Line Acknowledge",DEFAULT.LINE.ACK$)
  3306.       RETURN
  3307. 26110 CALL GETASCII ("Turn Echo Off",HOST.ECHO.OFF$)
  3308.       RETURN
  3309. 26115 CALL GETASCII ("Turn Graphic Emphasis ON",EMPHASIZE.ON.DEF$)
  3310.       RETURN
  3311. 26120 CALL GETASCII ("Turn Graphic Emphasis OFF",EMPHASIZE.OFF.DEF$)
  3312.       RETURN
  3313. '
  3314. ' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE)
  3315. '
  3316. 30000 OKAY = 0                      ' <---- check to see if file exists
  3317. 30010 NAME FILE$ AS FILE$           '   OKAY = 0 means file not found
  3318. 30020 OKAY = -1                     '   OKAY = 1 means file exists
  3319. 30030 RETURN
  3320. '
  3321. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD
  3322. '
  3323. 30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128        ' <---- read MESSAGES checkpoint record
  3324.       FIELD 2,128 AS RR$
  3325.       GET 2,1
  3326.       CALLS.TODATE! = VAL(MID$(RR$,1,8))             '  1-  8 = number of last message on system
  3327.       AUTO.ADD.SECURITY = CVI(MID$(RR$,9,2))         '  9- 10 = min. security to auto. add a user
  3328.       CURRENT.USER.COUNT = VAL(MID$(RR$,57,5))       ' 57- 61 = next avail. user record
  3329.       FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7))     ' 68- 74 = first rec. of msgs file
  3330.       NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7))      ' 75- 81 = next avail. msgs record
  3331.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))   ' 82- 88 = last rec. of msgs file
  3332.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))   ' 89- 95 = maximum number of messages
  3333.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
  3334.       CLOSE 2
  3335.       FIRST.USER.RECORD = 1
  3336.       IF MAIN.MESSAGE.FILE$ = MAINMSG$ THEN _
  3337.          AUTO.ADD.SECURITY$ = "CONF. ONLY" _
  3338.       ELSE AUTO.ADD.SECURITY$ = MID$(STR$(AUTO.ADD.SECURITY),2)
  3339.       RETURN
  3340. '
  3341. ' * COMMON ROUTINE TO UPDATE AUTO ADD SECURITY TO CONFERENCE FILE
  3342. '
  3343. 30100 CLOSE 1
  3344.       OPEN "R",1,MAIN.MESSAGE.FILE$
  3345.       FIELD 1,8 AS MR1$, 2 AS MR2$, 118 AS MR3$
  3346.       GET 1,1
  3347.       LSET MR2$ = MKI$(AUTO.ADD.SECURITY)
  3348.       PUT 1,1
  3349.       CLOSE 1
  3350.       RETURN
  3351. '
  3352. ' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD
  3353. '
  3354. 30450 CLOSE 2
  3355.       OPEN "R",2,MAIN.MESSAGE.FILE$            ' <---- update MESSAGES checkpoint record
  3356.       FIELD 2,128 AS RR$
  3357.       GET 2,1
  3358.       GOSUB 22340
  3359.       MID$(RR$,9,2)   = MKI$(AUTO.ADD.SECURITY)      '  9- 10 = min. security to auto. add a user
  3360.       MID$(RR$,57,5)  = LEFT$(STR$(CURRENT.USER.COUNT)  +SPACE$(5),5) ' 57- 61 = next avail. user record
  3361.       MID$(RR$,68,7)  = LEFT$(STR$(FIRST.MESSAGE.RECORD)+SPACE$(7),7) ' 68- 74 = first rec. of msgs file
  3362.       MID$(RR$,75,7)  = LEFT$(STR$(NEXT.MESSAGE.RECORD) +SPACE$(7),7) ' 75- 81 = next avail. msgs record
  3363.       MID$(RR$,82,7)  = LEFT$(STR$(HIGHEST.MESSAGE.RECORD)+SPACE$(7),7) ' 82- 88 = last rec. of msgs file
  3364.       MID$(RR$,89,7)  = LEFT$(STR$(MAXIMUM.NUMBER.OF.MSGS)+SPACE$(7),7) ' 89- 95 = maximum number of messages
  3365.       HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
  3366.       IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
  3367.          HJ$ = MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
  3368.       MID$(RR$,127,2) = HJ$                          '127-128 = maximum number of "nodes"
  3369.       PUT 2,1
  3370.       CLOSE 2
  3371.       RETURN
  3372. '
  3373. ' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE
  3374. '
  3375. 30610 A$ = MAIN.MESSAGE.FILE$
  3376.       IF NO.OLD.FILE THEN _
  3377.          GOTO 30612
  3378.       CLOSE 1
  3379.       OPEN "R",1,MAIN.MESSAGE.FILE$,128 ' OPEN OLD MESSAGES FILE
  3380.       FIELD 1,128 AS MESSAGE.RECORD$
  3381.       GOSUB 50095
  3382. 30612 CLOSE 2
  3383.       OPEN "R",2,A$,128                 ' OPEN NEW MESSAGES FILE
  3384.       FIELD 2,128 AS RR$
  3385.       A$="Copying"
  3386.       IF NO.OLD.FILE THEN _
  3387.          A$ = "Creating preformatted"
  3388.       OE = B1
  3389.       IF MAXIMUM.NUMBER.OF.NODES <= B1 THEN _
  3390.          OE = MAXIMUM.NUMBER.OF.NODES
  3391.       FOR J=1 TO OE + 1                 ' WRITE CHECKPOINT AND NODE RECORDS
  3392.          IF NO.OLD.FILE AND J = 1 THEN _
  3393.             GOSUB 31040
  3394.          IF NO.OLD.FILE AND J <> 1 THEN _
  3395.             GOSUB 31050
  3396.          IF NO.OLD.FILE = FALSE THEN _
  3397.             GET 1,J : _
  3398.             LSET RR$ = MESSAGE.RECORD$
  3399.          PUT 2
  3400.          GOSUB 25030
  3401.       NEXT
  3402.       IF NO.OLD.FILE THEN _
  3403.          GOTO 30850
  3404.       IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
  3405.          GOTO 30780
  3406.       FOR J = OE + 1 TO B1             ' WRITE OUT EXPANISON NODE RECORDS
  3407.          GOSUB 31050
  3408.          PUT 2
  3409.          GOSUB 25030
  3410.       NEXT
  3411. 30780 MAXIMUM.NUMBER.OF.NODES = B1     ' SET VALUE FOR MAXIMUM NUMBER OF NODES
  3412.       FOR J = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD - 1
  3413. 30830    GET 1,J
  3414.          IF PURGE <> -1 THEN _
  3415.             GOTO 30840
  3416.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
  3417.             PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
  3418.             GOTO 30840
  3419.          IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
  3420.             PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + "          purged..." : _
  3421.             J = LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,4)) : _
  3422.             GOTO 30830
  3423. 30840    LSET RR$ = MESSAGE.RECORD$
  3424.          PUT 2                    ' WRITE OUT MESSAGE RECORD
  3425.          GOSUB 25030
  3426.       NEXT
  3427.       B1 = LOC(2) + 1             ' GET NEW FILE'S NEXT MESSAGE RECORD
  3428.       CLOSE 1
  3429.       IF B3! < LOC(2) + 1 THEN _
  3430.          GOTO 30960
  3431. 30850 IF NO.OLD.FILE OR PURGE THEN _
  3432.          NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
  3433.          PURGE = 0 : _
  3434.          A$ = "Preformatting"
  3435.       GOSUB 25030
  3436.       FOR J! = NEXT.MESSAGE.RECORD TO B3!
  3437.          LSET RR$ = SPACE$(128)
  3438.          PUT 2                    ' WRITE OUT EXPANSION MESSAGE RECORDS
  3439.          LOCATE 24,X
  3440.          PRINT STR$(LOC(2)) + SPACE$(10);
  3441.       NEXT
  3442. 30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
  3443.       NEXT.MESSAGE.RECORD = B1
  3444.       IF NEXT.MESSAGE.RECORD < FIRST.MESSAGE.RECORD THEN _
  3445.          NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD
  3446.       HIGHEST.MESSAGE.RECORD = LOC(2)
  3447.       CLOSE 2
  3448. 30980 IF NO.OLD.FILE THEN _
  3449.          RETURN
  3450.       CALL GETNUMYN ("Delete the old " + _
  3451.                       MAIN.MESSAGE.FILE$ + _
  3452.                      " file?",AB)
  3453.       IF AB THEN _
  3454.          GOTO 31020
  3455. 31000 A$ = MAIN.MESSAGE.FILE$
  3456.       GOSUB 50096
  3457.       NAME MAIN.MESSAGE.FILE$ AS A$
  3458.       GOTO 31030
  3459. 31020 KILL MAIN.MESSAGE.FILE$
  3460. 31030 A$ = MAIN.MESSAGE.FILE$
  3461.       GOSUB 50095
  3462.       NAME A$ AS MAIN.MESSAGE.FILE$
  3463.       GOSUB 30450
  3464. 31035 RETURN
  3465. '
  3466. ' * COMMON SUBROUTINE TO CREATE A BLANK "CHECKPOINT" RECORD IN THE MESSAGE FILE
  3467. '
  3468. 31040 LSET RR$ = " 1      " + _               ' NUMBER OF LAST MESSAGE
  3469.                  MKI$(0) + _                  ' SECURITY LEVEL TO AUTO-ADD USER
  3470.                  SPACE$(117) + _              ' BLANKS IN ALL OTHER FIELDS 
  3471.                  STR$(MAXIMUM.NUMBER.OF.NODES) ' MAX. NUMBER OF NODES ALLOWED
  3472.       RETURN
  3473. '
  3474. ' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE
  3475. '
  3476. 31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0    0 0 0I"
  3477.       RETURN
  3478. '
  3479. ' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION
  3480. '
  3481. 50095 IF INSTR(A$,".") THEN _
  3482.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3483.               ".BAK" : _
  3484.          RETURN _
  3485.       ELSE A$ = A$ + _
  3486.                 ".BAK" : _
  3487.       RETURN
  3488. '
  3489. ' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION
  3490. '
  3491. 50096 IF INSTR(A$,".") THEN _
  3492.          A$ = MID$(A$,1,INSTR(A$,".") - 1) + _
  3493.               ".OLD" : _
  3494.          RETURN _
  3495.       ELSE A$ = A$ + _
  3496.                 ".OLD" : _
  3497.       RETURN
  3498. '
  3499. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24
  3500. '
  3501. 50345 I! = FRE(C$)
  3502. 50346 LOCATE 24,1
  3503.       PRINT SPACE$(5)+XX$+SPACE$(74-LEN(XX$));
  3504.       X = 5 + LEN(XX$) + 1
  3505.       RETURN
  3506. 50350 F$ = MAIN.USER.FILE$
  3507.       IF INSTR(MAIN.USER.FILE$,".") THEN _
  3508.          F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".") - 1)
  3509.       RETURN
  3510. '
  3511. ' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE
  3512. '
  3513. 50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
  3514.       HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF
  3515. 50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
  3516. 50500 OPEN "R",1,MAIN.USER.FILE$
  3517.       UG = LOF(1) / 128.0!
  3518.       MAX.USR.FILE.SIZE.FRM.DEF = UG
  3519.       HIGHEST.USER.RECORD = UG
  3520.       GOTO 50560
  3521. '
  3522. ' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE
  3523. '
  3524. 50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5 * MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
  3525. 50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
  3526. 50550 OPEN "R",1,MAIN.MESSAGE.FILE$
  3527.       IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1) / 128 THEN _
  3528.          MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1) / 128
  3529. 50560 GOSUB 22340
  3530.       CLOSE 1
  3531.       RETURN
  3532. '
  3533. ' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS
  3534. '
  3535. 50580 OLD = LOC(1)
  3536.       GET 1,I + 1
  3537.       IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3538.          OR  MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3539.          AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
  3540.          AND  MID$(MESSAGE.RECORD$,64,1) = ":" _
  3541.          AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3542.          AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3543.          RETURN
  3544.       PRINT "Message chain broken at record number " + STR$(OLD)
  3545.       PRINT "Message chain repair in progress!
  3546.       FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD - 1
  3547.          GET 1,IQ
  3548.          IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
  3549.             OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
  3550.             AND (MID$(MESSAGE.RECORD$,61,1)  = ":" _
  3551.             AND  MID$(MESSAGE.RECORD$,64,1)  = ":" _
  3552.             AND  MID$(MESSAGE.RECORD$,70,1) = "-" _
  3553.             AND  MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
  3554.             GET 1,OLD : _
  3555.             MID$(MESSAGE.RECORD$,117,4) = STR$(IQ - OLD) : _
  3556.             PUT 1,OLD : _
  3557.             PRINT "Message chain repaired." : _
  3558.             I = IQ : _
  3559.             RETURN
  3560.       NEXT
  3561.       RETURN 23730
  3562. '
  3563. ' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD #
  3564. '
  3565. 50720 JX = LEN.HASH
  3566.       WHILE MID$(HASH.VALUE$,JX,1) = " "
  3567.         JX = JX - 1
  3568.       WEND
  3569.       X$ = MID$(HASH.VALUE$,1,JX)
  3570.       UIX# = FNHSH(X$)
  3571.       Q = FNHSH2(X$)
  3572.       NSR = 1
  3573.       RO = CSRLIN
  3574.       CO = POS(0)
  3575. 50722 GET 2,UIX#
  3576.       HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
  3577.       IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
  3578.          GOTO 50730
  3579.       UIX# = UIX# + Q
  3580.       IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
  3581.          UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
  3582.       NSR = NSR + 1
  3583.       LOCATE RO,CO
  3584.       PRINT "searching";UIX#;
  3585.       GOTO 50722
  3586. 50730 LSET USER.RECORD.N$ = USER.RECORD$
  3587.       PUT 2,UIX#
  3588.       CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
  3589.       LOCATE RO,CO
  3590.       PRINT "to pos#";UIX#;"/";NSR;"srch(s) ";
  3591.       RETURN
  3592. '
  3593. ' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE
  3594. '
  3595. 50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
  3596.       GOSUB 25020
  3597.       FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
  3598.          LSET USER.RECORD.N$ = TEMPLATE$
  3599.          PUT 2
  3600.          LOCATE 24,X
  3601.          PRINT J;
  3602.       NEXT
  3603.       RETURN
  3604. '
  3605. ' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES
  3606. '
  3607. 59000 GOSUB 30100
  3608.       IF EXPERT.USER$ = "NOVICE" THEN _
  3609.          EXPERT.USER = 0
  3610.       IF EXPERT.USER$ = "EXPERT" THEN _
  3611.          EXPERT.USER = -1
  3612.       DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
  3613.       PROMPT.BELL = -1
  3614.       IF PROMPT.BELL$ = "OFF" THEN _
  3615.          PROMPT.BELL = 0
  3616.       PAGING.PRINTER.SUPPORT$ = ". "
  3617.       IF M11$ = "YES" THEN _
  3618.          PAGING.PRINTER.SUPPORT$ = ". " + _
  3619.                                    CHR$(7)
  3620.       GOSUB 15780
  3621.       GO.TO.SHELL = TRUE
  3622.       IF GO.TO.SHELL$ = "EXIT RBBS-PC" THEN _
  3623.          GO.TO.SHELL = FALSE
  3624.       IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
  3625.          MAIN.MESSAGE.FILE$ = MAINMSG$
  3626.       IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
  3627.          MAIN.USER.FILE$ = MAINUSR$
  3628.       IF CONFERENCE.MODE THEN _
  3629.          GOSUB 30040
  3630.       IF CALLERS.FILE$ = NONE.PICKED$ THEN _
  3631.          CALLERS.FILE$ = ""
  3632.       IF ALTDIR.EXTENSION$ = NONE.PICKED$ THEN _
  3633.          ALTDIR.EXTENSION$ = ""
  3634.       IF ALWAYS.STREW.TO$ = NONE.PICKED$ THEN _
  3635.          ALWAYS.STREW.TO$ = ""
  3636.       IF QUES.PATH$ = NONE.PICKED$ THEN _
  3637.          QUES.PATH$ = ""
  3638.       IF REQUIRED.QUESTIONNAIRE$ = NONE.PICKED$ THEN _
  3639.          REQUIRED.QUESTIONNAIRE$ = ""
  3640.       IF NET.MAIL$ = NONE.PICKED$ THEN _
  3641.          NET.MAIL$ = "NONE"
  3642.       IF CONFMAIL.LIST$ = NONE.PICKED$ THEN _
  3643.          CONFMAIL.LIST$ = ""
  3644.       IF REGISTRATION.PROGRAM$ = NONE.PICKED$ THEN _
  3645.          REGISTRATION.PROGRAM$ = ""
  3646. 59020 OPEN "O",#1,CONFIG.FILENAME$
  3647.       IF INSTR(MO$,":") < 1 THEN _
  3648.          MO$ = MO$ + _
  3649.                ":"
  3650.       IF INSTR(SJ$,":") < 1 THEN _
  3651.          SJ$ = SJ$ + _
  3652.                ":"
  3653.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  3654.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + _
  3655.                                 ":"
  3656.       T$ = DIRECTORY.EXTENTION$
  3657.       IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
  3658.          T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
  3659.       S$ = UPLOAD.DIRECTORY$
  3660.       IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
  3661.          S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".") - 1)
  3662.       DIRECTORY.EXTENTION$ = T$
  3663.       UPLOAD.DIRECTORY$ = S$
  3664.       IF NOT DOWNLOAD.TO.SUBDIR THEN _
  3665.          DNLD.SUB = 0 : _
  3666.          FOR I = 1 TO 99 : _
  3667.             DNLD$(I) = "" : _
  3668.          NEXT
  3669.       IF NOT UPLOAD.TO.SUBDIR THEN _
  3670.          UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + _
  3671.                           ":"
  3672.       IF UPLOAD.TO.SUBDIR AND UPLOAD.SUBDIR$ <> "" THEN _
  3673.          DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
  3674.       IF REQUIRED.RINGS = 0 AND _
  3675.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) <> "1Q0X1" THEN _
  3676.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,5) = "1Q0X1"
  3677.       IF REQUIRED.RINGS > 0 AND _
  3678.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "0Q0X1" THEN _
  3679.          MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0") + 3,3) = "254  "
  3680. '
  3681. ' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION
  3682. '
  3683. 59030 WRITE #1,VERSION.NUMBER$, _
  3684.                DOWNLOAD.DRIVES$, _
  3685.                SYSOP.PASSWORD.1$, _
  3686.                SYSOP.PASSWORD.2$, _
  3687.                SYSOP.FIRST.NAME$, _
  3688.                SYSOP.LAST.NAME$, _
  3689.                REQUIRED.RINGS, _
  3690.                START.OFFICE.HOURS, _
  3691.                END.OFFICE.HOURS, _
  3692.                MINUTES.PER.SESSION!, _
  3693.                MAX.ALLOWED.MSGS.FRM.DEF, _
  3694.                ACT.MNTHS.B4.DELETING, _
  3695.                UPLOAD.DIRECTORY$,_
  3696.                EXPERT.USER, _
  3697.                ACTIVE.BULLETINS, _
  3698.                PROMPT.BELL, _
  3699.                PCJR, _
  3700.                MENUS.CAN.PAUSE, _
  3701.                MENU$(1), _
  3702.                MENU$(2), _
  3703.                MENU$(3), _
  3704.                MENU$(4), _
  3705.                MENU$(5), _
  3706.                MENU$(6), _
  3707.                CONFERENCE.MENU$, _
  3708.                CONFERENCE.VIEWER.SEC.LVL, _
  3709.                WELCOME.INTERRUPTABLE, _
  3710.                REMIND.FILE.TRANSFERS, _
  3711.                PAGE.LENGTH, _
  3712.                MAX.MESSAGE.LINES, _
  3713.                DOORS.AVAILABLE, _
  3714.                MO$
  3715.       IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
  3716.          BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + _
  3717.                           BULLETIN.MENU$
  3718.       IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
  3719.          BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + _
  3720.                             BULLETIN.PREFIX$
  3721.       IF GLOBAL.FUNCTION(3) > MINIMUM.LOGON.SECURITY THEN _
  3722.          GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
  3723.       IF FILES.FUNCTION(2) > MINIMUM.LOGON.SECURITY THEN _
  3724.          FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
  3725.       IF LIBRARY.FUNCTION(4) > MINIMUM.LOGON.SECURITY THEN _
  3726.          LIBRARY.FUNCTION(4) = MINIMUM.LOGON.SECURITY
  3727.       IF LIBRARY.DRIVE$ = "" THEN _
  3728.          MAIN.FUNCTION(18) = 32767
  3729.       WRITE #1,MAIN.MESSAGE.FILE$, _
  3730.                MAIN.MESSAGE.BACKUP$, _
  3731.                CALLERS.FILE$, _
  3732.                COMMENTS.FILE$, _
  3733.                MAIN.USER.FILE$, _
  3734.                WELCOME.FILE$, _
  3735.                NEWUSER.FILE$, _
  3736.                DIRECTORY.EXTENTION$, _
  3737.                COM.PORT$, _
  3738.                BULLETINS.OPTIONAL, _
  3739.                USER.INIT.COMMAND$, _
  3740.                RTS$, _
  3741.                DOS.VERSION, _
  3742.                FG, _
  3743.                BG, _
  3744.                BORDER, _
  3745.                RBBS.BAT$, _
  3746.                RCTTY.BAT$
  3747.       WRITE #1,OMIT.MAIN.DIRECTORY$, _
  3748.                FIRST.NAME.PROMPT$, _
  3749.                HELP$(3), _
  3750.                HELP$(4), _
  3751.                HELP$(7), _
  3752.                HELP$(9), _
  3753.                BULLETIN.MENU$, _
  3754.                BULLETIN.PREFIX$, _
  3755.                DRIVE.FOR.BULLETINS$, _
  3756.                MESSAGE.REMINDER, _
  3757.                REQUIRE.NON.ASCII, _
  3758.                ASK.EXTENDED.DESC, _
  3759.                MAXIMUM.NUMBER.OF.NODES, _
  3760.                NETWORK.TYPE, _
  3761.                RECYCLE.TO.DOS, _
  3762.                MAX.USR.FILE.SIZE.FRM.DEF, _
  3763.                MAX.MSG.FILE.SIZE.FRM.DEF!, _
  3764.                TRASHCAN.FILE$
  3765.       WRITE #1,MINIMUM.LOGON.SECURITY, _
  3766.                DEFAULT.SECURITY.LEVEL, _
  3767.                SYSOP.SECURITY.LEVEL, _
  3768.                FILESEC.FILE$, _
  3769.                SYSOP.MENU.SECURITY.LEVEL, _
  3770.                CONFMAIL.LIST$, _
  3771.                MAXIMUM.VIOLATIONS, _
  3772.                SYSOP.FUNCTION(1), _
  3773.                SYSOP.FUNCTION(2), _
  3774.                SYSOP.FUNCTION(3), _
  3775.                SYSOP.FUNCTION(4), _
  3776.                SYSOP.FUNCTION(5), _
  3777.                SYSOP.FUNCTION(6), _
  3778.                SYSOP.FUNCTION(7), _
  3779.                PASSWORD.FILE$, _
  3780.                MAXIMUM.PASSWORD.CHANGES, _
  3781.                MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
  3782.                OVERWRITE.SECURITY.LEVEL, _
  3783.                DOORS.TERMINAL.TYPE, _
  3784.                MAX.PER.DAY
  3785.       WRITE #1,MAIN.FUNCTION(1), _
  3786.                MAIN.FUNCTION(2), _
  3787.                MAIN.FUNCTION(3), _
  3788.                MAIN.FUNCTION(4), _
  3789.                MAIN.FUNCTION(5), _
  3790.                MAIN.FUNCTION(6), _
  3791.                MAIN.FUNCTION(7), _
  3792.                MAIN.FUNCTION(8), _
  3793.                MAIN.FUNCTION(9), _
  3794.                MAIN.FUNCTION(10), _
  3795.                MAIN.FUNCTION(11), _
  3796.                MAIN.FUNCTION(12), _
  3797.                MAIN.FUNCTION(13), _
  3798.                MAIN.FUNCTION(14), _
  3799.                MAIN.FUNCTION(15), _
  3800.                MAIN.FUNCTION(16), _
  3801.                MAIN.FUNCTION(17), _
  3802.                MAIN.FUNCTION(18), _
  3803.                MIN.NEWCALLER.BAUD, _
  3804.                WAIT.BEFORE.DISCONNECT
  3805.       WRITE #1,FILES.FUNCTION(1), _
  3806.                FILES.FUNCTION(2), _
  3807.                FILES.FUNCTION(3), _
  3808.                FILES.FUNCTION(4), _
  3809.                FILES.FUNCTION(5), _
  3810.                FILES.FUNCTION(6), _
  3811.                FILES.FUNCTION(7), _
  3812.                FILES.FUNCTION(8), _
  3813.                UTILITY.FUNCTION(1), _
  3814.                UTILITY.FUNCTION(2), _
  3815.                UTILITY.FUNCTION(3), _
  3816.                UTILITY.FUNCTION(4), _
  3817.                UTILITY.FUNCTION(5), _
  3818.                UTILITY.FUNCTION(6), _
  3819.                UTILITY.FUNCTION(7), _
  3820.                UTILITY.FUNCTION(8), _
  3821.                UTILITY.FUNCTION(9), _
  3822.                UTILITY.FUNCTION(10), _
  3823.                UTILITY.FUNCTION(11), _
  3824.                UTILITY.FUNCTION(12), _
  3825.                GLOBAL.FUNCTION(1), _
  3826.                GLOBAL.FUNCTION(2), _
  3827.                GLOBAL.FUNCTION(3), _
  3828.                GLOBAL.FUNCTION(4), _
  3829.                UPLOAD.TIME.FACTOR!, _
  3830.                COMPUTER.TYPE, _
  3831.                REMIND.PROFILE, _
  3832.                RBBS.NAME$, _
  3833.                COMMANDS.BETWEEN.RINGS, _
  3834.                MNP.SUPPORT, _
  3835.                PAGING.PRINTER.SUPPORT$, _
  3836.                MODEM.INIT.BAUD$
  3837. 59035 WRITE #1,TURN.PRINTER.OFF,_
  3838.                DIRECTORY.PATH$,_
  3839.                MIN.SEC.TO.VIEW, _
  3840.                LIMIT.SEARCH.TO.FMS, _
  3841.                DEFAULT.CATEGORY.CODE$, _
  3842.                DIR.CATEGORY.FILE$, _
  3843.                NEW.FILES.CHECK, _
  3844.                MAX.DESC.LEN, _
  3845.                SHOW.SECTION, _
  3846.                COMMANDS.IN.PROMPT, _
  3847.                NEWUSER.SETS.DEFAULTS, _
  3848.                HELP.PATH$, _
  3849.                HELP.EXTENSION$, _
  3850.                MAIN.COMMANDS$, _
  3851.                FILE.COMMANDS$, _
  3852.                UTIL.COMMANDS$, _
  3853.                GLOBAL.COMMANDS$, _
  3854.                SYSOP.COMMANDS$
  3855.       WRITE #1,RECYCLE.WAIT, _
  3856.                LIBRARY.FUNCTION(1), _
  3857.                LIBRARY.FUNCTION(2), _
  3858.                LIBRARY.FUNCTION(3), _
  3859.                LIBRARY.FUNCTION(4), _
  3860.                LIBRARY.FUNCTION(5), _
  3861.                LIBRARY.FUNCTION(6), _
  3862.                LIBRARY.FUNCTION(7), _
  3863.                LIBRARY.DRIVE$, _
  3864.                LIBRARY.DIRECTORY.PATH$, _
  3865.                LIBRARY.DIRECTORY.EXTENTION$, _
  3866.                LIBRARY.WORK.DISK.PATH$, _
  3867.                LIBRARY.MAX.DISK, _
  3868.                LIBRARY.MAX.DIRECTORY, _
  3869.                LIBRARY.MAX.SUBDIR, _
  3870.                LIBRARY.SUBDIR.PREFIX$, _
  3871.                LIBRARY.ARCHIVE.PATH$, _
  3872.                LIBRARY.ARCHIVE.PROGRAM$, _
  3873.                LIBRARY.COMMANDS$
  3874.       WRITE #1,UPLOAD.PATH$, _
  3875.                FMS.DIRECTORY$, _
  3876.                ANS.MENU$, _
  3877.                REQUIRED.QUESTIONNAIRE$, _
  3878.                REMEMBER.NEW.USERS, _
  3879.                SURVIVE.NOUSER.ROOM, _
  3880.                PROMPT.HASH$, _
  3881.                START.HASH, _
  3882.                LEN.HASH, _
  3883.                PROMPT.INDIV$, _
  3884.                START.INDIV, _
  3885.                LEN.INDIV
  3886.       WRITE #1,BYPASS.MSGS, _
  3887.                MUSIC, _
  3888.                RESTRICT.BY.DATE, _
  3889.                DAYS.TO.WARN, _
  3890.                DAYS.IN.SUBSCRIPTION.PERIOD, _
  3891.                CALLBACK.VERIFICATION, _
  3892.                RESTRICT.VALID.CMDS, _
  3893.                NEW.USER.DEFAULT.MODE, _
  3894.                NEW.USER.LINE.FEEDS, _
  3895.                NEW.USER.NULLS, _
  3896.                NEW.USER.BELL, _
  3897.                NEW.USER.CASE, _
  3898.                NEW.USER.MARGINS, _
  3899.                WRAP.CALLERS.FILE$, _
  3900.                REDIRECT.IO.METHOD, _
  3901.                GO.TO.SHELL, _
  3902.                HALT.ON.ERROR, _
  3903.                NEW.PUBLIC.MSGS.SECURITY, _
  3904.                NEW.PRIVATE.MSGS.SECURITY, _
  3905.                SECURITY.NEEDED.TO.CHANGE.MSGS, _
  3906.                SL.CATEGORIZE.UPLOADS, _
  3907.                BAUDOT, _
  3908.                TIME.TO.DROP.TO.DOS, _
  3909.                EXPIRED.SECURITY, _
  3910.                DTR.DROP.DELAY, _
  3911.                ASK.IDENTITY, _
  3912.                USE.EXTERNAL.XMODEM, _
  3913.                BUFFER.SIZE, _
  3914.                MLCOM, _
  3915.                SHOOT.YOURSELF, _
  3916.                F7.MESSAGE$, _
  3917.                NEW.USER.DEFAULT.PROTOCOL$, _
  3918.                NEW.USER.GRAPHICS$, _
  3919.                NET.MAIL$, _
  3920.                MASTER.DIRECTORY.NAME$, _
  3921.                PROTO.DEF$, _
  3922.                UPCAT.HELP$, _
  3923.                ALWAYS.STREW.TO$, _
  3924.                LAST.NAME.PROMPT$
  3925.       MSB = LSB + 1
  3926.       LINE.CONTROL.REGISTER = LSB + 3
  3927.       MODEM.CONTROL.REGISTER = LSB + 4
  3928.       LINE.STATUS.REGISTER = LSB + 5
  3929.       MODEM.STATUS.REGISTER = LSB + 6
  3930.       WRITE #1,PERSONAL.DRVPATH$, _
  3931.                PERSONAL.DIR$, _
  3932.                PERSONAL.BEGIN, _
  3933.                PERSONAL.LEN, _
  3934.                PERSONAL.PROTOCOL$, _
  3935.                PERSONAL.CONCAT, _
  3936.                PRIVATE.READ.SEC, _
  3937.                PUBLIC.READ.SEC, _
  3938.                SEC.CHANGE.MSG, _
  3939.                KEEP.INIT.BAUD, _
  3940.                MAIN.PUI$, _
  3941.                DEFAULT.ECHOER$, _
  3942.                HOST.ECHO.ON$, _
  3943.                HOST.ECHO.OFF$, _
  3944.                SWITCH.BACK, _
  3945.                DEFAULT.LINE.ACK$, _
  3946.                ALTDIR.EXTENSION$, _
  3947.                DIRECTORY.PREFIX$
  3948.       WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
  3949.                MODEM.INIT.WAIT.TIME, _
  3950.                MODEM.COMMAND.DELAY.TIME, _
  3951.                TURBO.RBBS, _
  3952.                DNLD.SUB, _
  3953.                WILL.SUBDIRS.B.USED, _
  3954.                UPLOAD.TO.SUBDIR, _
  3955.                DOWNLOAD.TO.SUBDIR, _
  3956.                UPLOAD.SUBDIR$, _
  3957.                MIN.OLDCALLER.BAUD, _
  3958.                USE.EXTERNAL.YMODEM, _
  3959.                DISKFULL.GO.OFFLINE, _
  3960.                EXTENDED.LOGGING, _
  3961.                USER.RESET.COMMAND$, _
  3962.                USER.COUNT.RINGS.COMMAND$, _
  3963.                USER.ANSWER.COMMAND$, _
  3964.                USER.GO.OFFHOOK.COMMAND$, _
  3965.                DISK.FOR.DOS$, _
  3966.                DUMB.MODEM, _
  3967.                COMMENTS.AS.MESSAGES, _
  3968.                LSB, _
  3969.                MSB, _
  3970.                LINE.CONTROL.REGISTER, _
  3971.                MODEM.CONTROL.REGISTER, _
  3972.                LINE.STATUS.REGISTER, _
  3973.                MODEM.STATUS.REGISTER
  3974.       ORIG.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ + _
  3975.                        FILE.COMMANDS.DEFAULTS$ + _
  3976.                        UTIL.COMMANDS.DEFAULTS$ + _
  3977.                        LIBRARY.COMMANDS.DEFAULTS$ + _
  3978.                        GLOBAL.COMMANDS.DEFAULTS$ + _
  3979.                        SYSOP.COMMANDS.DEFAULTS$
  3980.       WRITE #1,KEEP.TIME.CREDITS, _
  3981.                XON.XOFF, _
  3982.                ALLOW.CALLER.TURBO, _
  3983.                USE.DEVICE.DRIVER$, _
  3984.                PRELOG$, _
  3985.                NEW.USER.QUESTIONNAIRE$, _
  3986.                EPILOG$, _
  3987.                REGISTRATION.PROGRAM$, _
  3988.                QUES.PATH$, _
  3989.                USER.LOCATION$, _
  3990.                USER.INITIALIZE.COMMAND$, _
  3991.                USER.FIRMWARE.CLEAR.CMND$, _
  3992.                USER.FIRMWARE.WRITE.CMND$, _
  3993.                ENFORCE.UPLOAD.DOWNLOAD.RATIOS, _
  3994.                SIZE.OF.STACK, _
  3995.                SECURITY.EXEMPT.FROM.EPILOG, _
  3996.                USE.BASIC.WRITES, _
  3997.                DOSANSI, _
  3998.                ESCAPE.INSECURE, _
  3999.                USE.DIR.ORDER, _
  4000.                ADD.DIR.SECURITY, _
  4001.                MAX.EXTENDED.LINES, _
  4002.                ORIG.COMMANDS$
  4003.       IF MACRO.EXTENSION$ <> "" THEN _
  4004.          MACRO.EXTENSION$ = "." + MACRO.EXTENSION$
  4005.       CALL COLORCODE (FG.1.DEF$,FG.1.DEF$,X)
  4006.       CALL COLORCODE (FG.2.DEF$,FG.2.DEF$,X)
  4007.       CALL COLORCODE (FG.3.DEF$,FG.3.DEF$,X)
  4008.       CALL COLORCODE (FG.4.DEF$,FG.4.DEF$,X)
  4009.       WRITE #1,LOGON.MAIL.LEVEL$, _
  4010.                MACRO.DRVPATH$, _
  4011.                MACRO.EXTENSION$, _
  4012.                EMPHASIZE.ON.DEF$, _
  4013.                EMPHASIZE.OFF.DEF$, _
  4014.                FG.1.DEF$, _
  4015.                FG.2.DEF$, _
  4016.                FG.3.DEF$, _
  4017.                FG.4.DEF$, _
  4018.                SECVIO.HLP$, _
  4019.                FOSSIL, _
  4020.                MAX.CARRIER.WAIT, _
  4021.                CALLER.BKGRD, _
  4022.                SMART.TEXT, _
  4023.                TIME.LOCK, _
  4024.                WRITE.BUF.DEF, _
  4025.                DF, _
  4026.                DF, _
  4027.                DF, _
  4028.                AUTOPAGE.DEF$
  4029.       IF DNLD.SUB <1 OR DNLD.SUB > 99 THEN _
  4030.          GOTO 59080
  4031.       FOR I = 1 TO DNLD.SUB
  4032.          WRITE #1,DNLD$(I)
  4033.       NEXT
  4034. 59080 CLOSE #1
  4035. '
  4036. ' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN
  4037. '
  4038.       CLS
  4039.       LOCATE 12,1,1
  4040.       PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
  4041.       GOSUB 60380
  4042.       GOTO 60340
  4043. '
  4044. ' *  CONFIG.BAS'S ERROR ROUTINES
  4045. '
  4046. 60010 '* HANDLE ERROR CONDITIONS *
  4047.       ' PRINT ERR,ERL : STOP
  4048.       IF ERR = 53 AND ERL = 30010 THEN _
  4049.          RESUME 30030
  4050.       IF ERR = 58 AND ERL = 30010 THEN _
  4051.          RESUME 30020
  4052.       IF ERR = 62 AND _
  4053.         (ERL = 11600 OR _
  4054.          ERL = 11620 OR _
  4055.          ERL = 11640 OR _
  4056.          ERL = 11660 OR _
  4057.          ERL = 11680 OR _
  4058.          ERL = 11700 OR _
  4059.          ERL = 11705 OR _
  4060.          ERL = 11706) THEN _
  4061.          PRINT CONFIG.FILENAME$ + _
  4062.                " from a version earlier than " + CONFIG.VERSION$ + " on default drive." : _
  4063.          PRINT "Please delete and rerun CONFIG." : _
  4064.          RESUME 60340
  4065.       IF ERL = 15780 AND ERR = 5 AND _
  4066.          INSTR(USER.INIT.COMMAND$,"S0=") = 0 THEN _
  4067.          RESUME 16073
  4068.       IF ERL = 31000 AND ERR = 58 THEN _
  4069.          KILL A$ : _
  4070.          RESUME 31000
  4071.       IF ERL = 31030 AND ERR = 58 THEN _
  4072.          KILL A$ : _
  4073.          RESUME 31030
  4074.       IF ERL = 22120 AND ERR = 6 THEN _
  4075.          RESUME 22100
  4076.       IF ERL = 24750 AND ERR = 58 THEN _
  4077.          KILL A$ : _
  4078.          RESUME 24750
  4079.       IF ERL = 31020 THEN _
  4080.          PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;".  Error";STR$(ERR):_
  4081.          RESUME 31035
  4082.       IF ERL = 50490 AND ERR = 58 THEN  _
  4083.          RESUME 50500
  4084.       IF ERL = 50540 AND ERR = 58 THEN  _
  4085.          RESUME 50550
  4086.       IF ERL = 50490 OR ERL = 50540 THEN _
  4087.          RESUME 15230
  4088.       IF ERL = 60471 THEN _
  4089.          IF ERR <> 76 THEN _
  4090.             RESUME 60478 _
  4091.          ELSE RESUME 60474
  4092.       IF ERL = 60480 THEN _
  4093.          PRINT "ERROR -";ERR;" UNABLE TO CREATE SUBDIRECTORY" : _
  4094.          RESUME 60478
  4095.       IF ERR = 61 THEN _
  4096.          PRINT "ERROR - IBM DOS DISKETTE FULL " : _
  4097.          RESUME 60340
  4098.       IF ERR = 67 THEN _
  4099.          PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
  4100.          RESUME 60340
  4101.       IF ERR = 70 THEN _
  4102.          PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
  4103.          RESUME 60340
  4104.       IF ERR = 71 THEN _
  4105.          PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE"  : _
  4106.          RESUME 60340
  4107.       IF ERR = 72 THEN _
  4108.          PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
  4109.          RESUME 60340
  4110.       PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
  4111. 60340 IF CONFERENCE.MODE = 1 THEN _
  4112.          DELAY! = FNTI! + 5
  4113.       GOSUB 60440
  4114. 60360 SYSTEM
  4115. '
  4116. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP
  4117. '
  4118. 60380 FOR I = 1 TO 2
  4119.         BEEP
  4120.       NEXT
  4121.       RETURN
  4122. '
  4123. ' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS
  4124. '
  4125. 60440 ' wait routine
  4126. 60450 IF FNTI! < DELAY! THEN _
  4127.          GOTO 60450
  4128.       RETURN
  4129. '
  4130. ' * COMMON ROUTINE TO CHECK DRIVE/PATH FOR FORMAT/EXISTENCE
  4131. '
  4132. 60470 IF LEN(STRNG$) < 1 THEN _
  4133.          GOTO 60476
  4134.       IS.OK = TRUE
  4135. 60471 NAME STRNG$ + "XX" AS STRNG$ + "XX"
  4136. 60474 BEEP
  4137.       CALL ASKRO ("Bad/missing drive/path <"+STRNG$+">  [R]e-enter, I)gnore, C)reate",24,ANS$)
  4138.       CALL ALLCAPS (ANS$)
  4139.       ON INSTR("RIC",ANS$) GOTO 60476,60478,60480
  4140. 60476 IS.OK = FALSE
  4141. 60478 RETURN
  4142. 60480 MKDIR LEFT$(STRNG$,LEN(STRNG$)-1)
  4143.       RETURN
  4144.